Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 30

QCheckBox запоминающей состояние

13.05.2021, 13:58. Показов 1995. Ответов 9

Студворк — интернет-сервис помощи студентам
Есть программа для обработки изображения (выявления дефектов). Необходимо сделать CheckBox который бы запоминал состояние, изначально галочка скрыта, и с помощью кнопки прогружается изображение без дефектов, а когда оно загрузилось показывается CheckBox и при нажатии на него уже грузится изображение с дефектами. Хранятся два изображения : обработанное и исходное. Как можно это осуществить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2021, 13:58
Ответы с готовыми решениями:

QCheckBox запоминающей состояние. т.е. нажали - отобразились одна картинка, нажали еще раз все пропало
Есть программа в которой существует кнопка загрузки изображения, необходимо добавить CheckBox (запоминающей состояние) при нажатии на...

О программке, запоминающей раб.область
Добрый день! Подскажите пожалуйста - есть ли программка/скримт до Лотус Нотс , которая запоминает все окна и программы, в которых ты...

QCheckBox
Привет. Необходимо обработать изменение состояние чекбокса. Имеется слот: void itemSelected(int state) { if (state ==...

9
Покинул чат.
1132 / 727 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
13.05.2021, 14:51
Вы сами отвечаете на свой вопрос
Цитата Сообщение от As423088 Посмотреть сообщение
с помощью кнопки прогружается изображение без дефектов
подозреваю коннект нажатия на кнопку и слот загрузки изображения. В классе сделайте переменную для хранения текущего изображения , которое загрузит Ваш слот.
Цитата Сообщение от As423088 Посмотреть сообщение
когда оно загрузилось показывается CheckBox
вот в слоте показывайте CheckBox->setVisible(true)
Цитата Сообщение от As423088 Посмотреть сообщение
показывается CheckBox и при нажатии на него уже грузится изображение с дефектами
а тут коннект сигнала клика по чекбоксу со слотом загрузки изображения, сделав текущим необходимое изображение.
0
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 30
13.05.2021, 16:42  [ТС]
Загрузка и поиск дефектов у меня осуществляется по нажатию кнопки LOAD
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
void MainWindow::on_pushButton_clicked()
{
   uint imageWidth;
    uint imageHeight;
    ushort * imageData, *tmp;
    QByteArray ba;
    QString fp = QFileDialog::getOpenFileName();
    const char *c_str;
 
    qDebug() << "MainWindow::1";
        ba = fp.toLocal8Bit();
        qDebug() << "MainWindow::2";
        c_str = ba.data();
        qDebug() << "MainWindow::3";
        tmp = p_tiff->openFile(c_str, &imageWidth, &imageHeight);
    qDebug() << "MainWindow::4 " << imageWidth << imageHeight;
 
 
    imageData = new ushort[imageWidth * imageHeight];
    memcpy(imageData, tmp, imageWidth * imageHeight * 2);
    qDebug() << "MainWindow::5";
 
    QImage image(imageWidth, imageHeight, QImage::Format_Indexed8);
    qDebug() << "MainWindow::6";
 
    quint8 * line = image.scanLine(0);
    int stride = image.bytesPerLine();
    qDebug() << "MainWindow::7";
 
    qint32 pixel = 0;
    for ( int y = 0; y < imageHeight; ++y, line += stride)
    {
        quint8 * pix = line;
        for ( int x = 0; x < imageWidth; ++x, pix += 1)
        {
            pixel  = imageData[(y*imageWidth)+x]/255;
 
            if (pixel > 255)
            {
                pixel = 255;
            }
            if (pixel < 0)
            {
                pixel = 0;
            }
 
            pix[0] = pixel;
        }
    }
    qDebug() << "MainWindow::8";
 
    Mat img = QImage2Mat(image);
    if (img.empty())
        {
            qDebug() << "Image Loading error";
            return;
        }
 
 
 //   Mat tresh;
//    threshold (img,tresh,160,198,THRESH_BINARY_INV);
 
 //   GaussianBlur(img,tresh,Size(3,7),0,0,BORDER_DEFAULT);
 
if (ui->defect->isChecked()){
 
///////////// Canny детектор границ  /////////////////////////////////
 
    Canny(img,imageCanny,14,10);
 
/////////     Расширение границ, которые нашел Canny   /////////////////////////////////
 
     Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5));
     dilate(imageCanny, imgDil,kernel);
 
     getContours(imgDil, img);
}
 
////    imshow("Image", imageCanny);
 
//////////////    Размер картинки  //////////////////
 
        QSize picSize = ui->image->size();
        QPixmap originalPixmap = QPixmap::fromImage(Mat2QImage(img));
        QPixmap scaledPixmap = originalPixmap.scaled(picSize, Qt::KeepAspectRatio);
 
////////////   Вывод картинки в QLabel  /////////////
 
        ui->image->setPixmap(scaledPixmap);

а теперь мне нужно добавить кнопку или чекбокс, где будет прогружаться картинки с дефектами
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
13.05.2021, 17:04
И в чём вопрос-то? Ты добавил этот checkbox? Он не работает или что?
0
Покинул чат.
1132 / 727 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
13.05.2021, 17:16
Цитата Сообщение от As423088 Посмотреть сообщение
а теперь мне нужно добавить кнопку или чекбокс, где будет прогружаться картинки с дефектами
так добавьте, Вы же лутше знаете свой код, я немогу по слоту одной кнопки определить структуру всего приложения.
Предполагаю что если создаете чекбокс то в строчке 89 будет что-то типа
if(checkBox->isChecked()) ui->image->setPixmap(scaledPixmap);

а если выводить при нажатии на кнопку то нужно сохранить это изображение как текущее, где-то в классе
QPixmap currentScaledPixmap;
тогда в стр.89
currentScaledPixmap= scaledPixmap;
так-же создаете кнопку и связываете сигнал ее нажатия с выводом изображения, нечто вроде
connect(showImageButton, &PushButton::clicked, this, showImageSlot);
и в слоте делаете вывод изображения
showImageSlot(){
ui->image->setPixmap(currentScaledPixmap);
}
0
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 30
13.05.2021, 21:16  [ТС]
вопрос в том, что у меня должно быть 2 кнопки. Первая с загрузкой изображения, его обработкой и выводом в label изображения до обработки. Вторая должна показывать в label обработанное изображение. И вот со второй кнопкой и выходят трудности, не получается вывести обработанное изображение в label , я уже всю голову сломала как это можно сделать.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
13.05.2021, 21:49
Так же, как и первое.
0
Покинул чат.
1132 / 727 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
13.05.2021, 22:15
что конкретно не получается? вот схематичный план класса накидал

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.h
class myClass
{
 Q_OBJECT
QPushButton showOriginalImage;
QPushButton showCorrectedImage;
QLabel image;
QPixmap originalPixmap;
 
QPixmap getCorrectedImage(QPixmap originalPixmap);//перенесите туда код, находящий дефекты
public slots:
void showOriginalImageSlot();
void showCorrectedImageSlot();
}
 
.cpp
myClass::init(){
originalPixmap=....
connect( &showOriginalImage,  &QPushButton::clicked, this,  &myClass::showOriginalImageSlot );
connect( &showCorrectedImage, &QPushButton::clicked, this,  &myClass::showCorrectedImageSlot );
}
 
void myClass::showOriginalImageSlot(){
 image->setPixmap(originalPixmap);
}
 
showCorrectedImageSlot(){
 image->setPixmap( getCorrectedImage(originalPixmap) );
}
0
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 30
14.05.2021, 13:43  [ТС]
пишет, что mainwindow.cpp:112:1: warning: non-void function does not return a value
Правильно ли я поняла вашу идею, или подскажите где ошибаюсь

.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QFileDialog>
#include <QDebug>
#include <QCheckBox>
#include <QPushButton>
#include <QLabel>
 
#include "opencv2/opencv.hpp"
#include "opencv2/opencv_modules.hpp"
#include "opencv2/core.hpp"
#include "opencv2/core/utility.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
 
 
#include "service_functions.h"
 
using namespace cv;
using namespace std;
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
    QPushButton showOriginalImage;
    QPushButton showCorrectedImage;
    QLabel image;
    QPixmap originalPixmap;
 
    QPixmap getCorrectedImage(QPixmap originalPixmap);
 
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
    myTIFF *p_tiff;
 
 
private slots:
 
 
    void showOriginalImageSlot();
    void showCorrectedImageSlot();
 
    QImage Mat2QImage(Mat const& src);
    Mat QImage2Mat(QImage const& src);
 
private:
 
    Ui::MainWindow *ui;
    Mat img,imgray,imgBlur,imageCanny,imgDil;
    void getContours(Mat imgDil, Mat img);
    QPixmap pixSource;
 
};
#endif // MAINWINDOW_H

.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    p_tiff = new myTIFF("MainWindow");
 
    ui->pushButton_2->hide();
 
 
    connect( &showOriginalImage,  &QPushButton::clicked, this,  &MainWindow::showOriginalImageSlot );
    connect( &showCorrectedImage, &QPushButton::clicked, this,  &MainWindow::showCorrectedImageSlot );
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
 
 
void MainWindow::showOriginalImageSlot()
{
    uint imageWidth;
    uint imageHeight;
    ushort * imageData, *tmp;
    QByteArray ba;
    QString fp = QFileDialog::getOpenFileName();
    const char *c_str;
 
    qDebug() << "MainWindow::1";
        ba = fp.toLocal8Bit();
        qDebug() << "MainWindow::2";
        c_str = ba.data();
        qDebug() << "MainWindow::3";
        tmp = p_tiff->openFile(c_str, &imageWidth, &imageHeight);
    qDebug() << "MainWindow::4 " << imageWidth << imageHeight;
   imageData = new ushort[imageWidth * imageHeight];
    memcpy(imageData, tmp, imageWidth * imageHeight * 2);
    qDebug() << "MainWindow::5";
 
    QImage image(imageWidth, imageHeight, QImage::Format_Indexed8);
    qDebug() << "MainWindow::6";
 
    quint8 * line = image.scanLine(0);
    int stride = image.bytesPerLine();
    qDebug() << "MainWindow::7";
 
    qint32 pixel = 0;
    for ( int y = 0; y < imageHeight; ++y, line += stride)
    {
        quint8 * pix = line;
        for ( int x = 0; x < imageWidth; ++x, pix += 1)
        {
            pixel  = imageData[(y*imageWidth)+x]/255;
 
            if (pixel > 255)
            {
                pixel = 255;
            }
            if (pixel < 0)
            {
                pixel = 0;
            }
 
            pix[0] = pixel;
        }
    }
    qDebug() << "MainWindow::8";
 
    img = QImage2Mat(image);
    if (img.empty())
        {
            qDebug() << "Image Loading error";
            return;
        }
 
      ui->pushButton_2->show();
 
//////////////    Размер картинки  //////////////////
      QSize picSize = ui->image->size();
      originalPixmap = QPixmap::fromImage(Mat2QImage(img));
      QPixmap scaledPixmap = originalPixmap.scaled(picSize, Qt::KeepAspectRatio);
////////////   Вывод картинки в QLabel  /////////////
 
      ui->image->setPixmap(scaledPixmap);
 
}
 
QPixmap MainWindow::getCorrectedImage(QPixmap originalPixmap)
{
    ///////////// Canny детектор границ  /////////////////////////////////
             Canny(img,imageCanny,14,10);
    /////////     Расширение границ, которые нашел Canny   /////////////////////////////////
              Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5));
              dilate(imageCanny, imgDil,kernel);
              getContours(imgDil, img);
}
 
void MainWindow::showCorrectedImageSlot()
{
    
 ui->image->setPixmap(getCorrectedImage(originalPixmap));
}
 
 
QImage MainWindow::Mat2QImage(Mat const& src)
{
     Mat temp; // make the same cv::Mat
     if(src.channels() != 1) cvtColor(src, temp,COLOR_BGR2RGB,0); // cvtColor Makes a copt, that what i need
     else cvtColor(src, temp,COLOR_GRAY2RGB,0);
     QImage dest= QImage((const uchar*) temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB888).rgbSwapped();
     dest.bits();
     return dest;
}
 
Mat MainWindow::QImage2Mat(QImage const& src)
{
    Mat mat (src.height(), src.width(),
    CV_8UC1,
    const_cast<uchar*>(src.bits()),
    static_cast<size_t>(src.bytesPerLine()));
    return mat;
}
 
void MainWindow::getContours(Mat imgDil, Mat img)
{
 
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;
 
   findContours(imgDil, contours, hierarchy,RETR_LIST, CHAIN_APPROX_NONE);
 
///////////// Фильтр по контуру фигур (круг)////////////////
 
    for (int i=0; i < contours.size(); i++)
    {
 
        double area = contourArea(contours[i]);//возвращает площадь контура
 
        qDebug() << " Area: " <<  area  << endl;
 
         double perim = arcLength(contours[i],true);//возвращает периметр
 
        qDebug() <<  " Perim: " << perim << endl;
 
        //Фильтрация по размеру области
        if (area / (perim * perim) > 0.01 && area / (perim * perim)< 0.09 )
        {
            drawContours(img,contours, i, Scalar(255,0,255),7);
 
////////////////////////////////////
           char text[] ="" ;
 
     //    const char *text ="";
 
 
            Rect brect = boundingRect(contours[i]);
//               if (brect.area() < 1000)
//               continue;
 
            sprintf(text,"S = %d", brect.area());
                string str(text);
                putText(img,str, Point(brect.x+20, brect.y+20), 1, 1, CV_RGB(0,255,0));
                imshow("Image", img);
///////////////////////////////////
        }
 }
}
0
Покинул чат.
1132 / 727 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
14.05.2021, 16:42
Цитата Сообщение от As423088 Посмотреть сообщение
warning: non-void function does not return a value
это не ошибка а просто предупреждение , что функция должна возвратить какое-то значение но не возвращает
как например здесь:
Цитата Сообщение от As423088 Посмотреть сообщение
C++ (Qt)
1
2
3
4
5
6
7
8
9
QPixmap MainWindow::getCorrectedImage(QPixmap originalPixmap)
{
    ///////////// Canny детектор границ  /////////////////////////////////
             Canny(img,imageCanny,14,10);
    /////////     Расширение границ, которые нашел Canny   /////////////////////////////////
              Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5));
              dilate(imageCanny, imgDil,kernel);
              getContours(imgDil, img);
}
Сорри я незнаю что такое Canny и что происходит в этом коде, но по логике в этой функции мы должны некое изображение обработать и вернуть, тоесть должно быть что-то вроде return correctedPixmap, где correctedPixmap-это уже обработанное, исправленное изображение, иначе здесь
C++ (Qt)
1
2
3
4
void MainWindow::showCorrectedImageSlot()
{    
 ui->image->setPixmap(getCorrectedImage(originalPixmap));
}
ничего не будет выведено при нажатии на кнопку.

Так же по поводу оригинальной картинки, возможно, стоит сохранять уже отмасшабированное изображение, либо хранить дефолтное, отмасштабированное, и исправленное изображение- это как Вам удобнее.
C++ (Qt)
1
2
3
4
5
6
originalPixmap = QPixmap::fromImage(Mat2QImage(img));
      QPixmap scaledPixmap = originalPixmap.scaled(picSize, Qt::KeepAspectRatio);
      originalPixmap = scaledPixmap ;//  <<== можно так, если это не нарушает логику в другом месте кода
////////////   Вывод картинки в QLabel  /////////////
 
      ui->image->setPixmap(scaledPixmap);
Еще небольшое замечание- в .h файле функции
QImage Mat2QImage(Mat const& src);
Mat QImage2Mat(QImage const& src);
записаны в слоты, хотя ими не являются, как я понимаю.

Чтобы проще было отлавливать ошибки/неточности в коде - можно раскидать код по функциям, например загрузку из файла, сохранение в файл, масштабирование изображения и тому подобное.

Добавлено через 17 минут
и кстати originalPixmap храним в классе, так что передавать его и ненадо, мой косяк
Цитата Сообщение от sdf45 Посмотреть сообщение
QPixmap MainWindow::getCorrectedImage(QPixmap originalPixmap)
to
Цитата Сообщение от sdf45 Посмотреть сообщение
QPixmap MainWindow::getCorrectedImage()
Добавлено через 1 час 2 минуты
Увидел еще одну Вашу тему
Как в QT+OpenCV выводить на экран размер найденного контура
там Вы пишете
Цитата Сообщение от As423088 Посмотреть сообщение
а для вывода на экран я использую вот это

C++
1
2
3
4
5
6
      char text[] ="" ;
            Rect brect = boundingRect(contours[i]);
            sprintf(text,"S = %d", brect.area());
            string str(text);
                putText(img,str, Point(brect.x+20, brect.y+20), 1, 1, CV_RGB(0,255,0));
                imshow("Image", img);
Как я понял это и есть код, выводящий изображение с дефектами, которые обведены контуром.
Стало быть нужно в слоте showCorrectedImageSlot() вызывать эту функцию, однако куда она выводит изображение, мне не понятно, так же как и формат самого изображения Mat img. Хотя есть ф-я которая возвращает QImage но что за Mat const& src я тоже хз.. Видимо это нечто из OpenCV?
C++ (Qt)
1
2
3
4
5
6
7
8
9
QImage MainWindow::Mat2QImage()
{
     Mat temp; // make the same cv::Mat
     if(src.channels() != 1) cvtColor(src, temp,COLOR_BGR2RGB,0); // cvtColor Makes a copt, that what i need
     else cvtColor(src, temp,COLOR_GRAY2RGB,0);
     QImage dest= QImage((const uchar*) temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB888).rgbSwapped();
     dest.bits();
     return dest;
}
В общем, я думаю, тут нужен знающий OpenCV человек, для меня это всё тёмный лес.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.05.2021, 16:42
Помогаю со студенческими работами здесь

QListWidget и QCheckbox
Хочу создать ListWidget с заблокированными чекбоксами for (int i = 0; i &lt; 5; i++) { QListWidgetItem *listItem = new...

QTableView и QCheckBox
Есть QTableView, есть модель, есть делегат, который для одного из столбцов устанавливает чекбокс для редактирования. Но какая проблема с...

QListWiget и QCheckBox
Прошу помощи, мне необходимо выводить чекбоксы через QListWiget и по нажатию кнопки проверять их значения, но вот проблема, получить...

QCheckBox и QTableView
Есть QTableView. Мне надо часть данных отобразить в виде чекбокса. Хочу найти решение без наследования и запихивания чекбоксов в ячейки...

QTableView + QCheckBox
Доброго времени суток. Собственно подобные сабжы уже были, но у меня своя специфика. Мне необходимо чтобы в горизонтальных заголовках...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru