Задать вопрос
@AlexSer

Как в QT сделать вывод прочтенных данных с ком порта?

Добрый день! Программирую программу с динамическими добавления соединения с ком портами(на случай если, много устройств).
Необходимо сделать вывод принятых данных с каждого порта на свое окно, после нажатия кнопки "терминал";

Вот так выглядит вид:
641021ff00bd0337115757.png

//подключение сигнала нажатия кнопки "СТАРТ"
//создаем подключение к ком портам
 connect(ui->pushStart,SIGNAL(clicked()),this, SLOT(connectSerialPort()));


void MainWindow::connectSerialPort()
{


    static int i=0;
  terminal=new Terminal();

  QString portName;
  portName=ui->comboBox->currentText();

   serial=new SerialPortClass();
   serial->port=portName;
   serial->openConnection();

             btn_terminal=new QPushButton("Терминал",this);
             btn_stop=new QPushButton("Стоп",this);



             item = new QStandardItem(portName);
             model->setItem(i, 0, item);
             item = new QStandardItem(QString("Device " + QString(i)));
             model->setItem(i, 1, item);
             item = new QStandardItem(QString("Сoeдинен"));
             model->setItem(i, 2, item);
             item = new QStandardItem(QString("Доступен"));
             ui->tableListSerial->setIndexWidget(ui->tableListSerial->model()->index(i, 3),btn_terminal);
             ui->tableListSerial->setIndexWidget(ui->tableListSerial->model()->index(i, 4),btn_stop);
             ui->tableListSerial->setModel(model);

         connect(btn_stop,&QPushButton::clicked,serial,&SerialPortClass::closeConnection);
         //соединяю объект serial с окном отображения  данных  Terminal
         connect(serial, &SerialPortClass::recieveDataTerminal,terminal,&Terminal::showData);

         terminal->setWindowTitle(portName);
         terminal->show();
         i++;
}

Сейчас каждое окно соединения создается сразу после нажатия кнопки "Старт";
64102485bb741481349186.png

Если я вывожу код открытия окна терминала в отдельный слот и произвожу коннект, тогда данные идут только с последнего соединенного порта, так как передается только последний объект serial.
Как можно сделать, чтобы только после нажатия кнопки "Терминал", открывалось окно и шли данные со каждого порта в свое окно ?
  • Вопрос задан
  • 230 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
В каждое окно терминала передавайте объект serial port и в каждом окне в конструкторе подписывайтесь на событие получения данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы