Пишу программу на QT для работы с Com портами.. Так как новичок многое не понятно.
Проблема такая, не удается привязать актионы (подключения к ком портам) к слоту. Если произвожу соединение с ком портом, то в дебаге отображаются данные только по последнему соединению.
Я пытаюсь сделать, так чтобы все соединения с ком портом, шли через 1 слот.
Если я делаю два разных слота на коннект к ком порту, то данные идут нормально. Дебаг отображает данные с 2 - ком портов. но тут уже идет дублирование кода. А так как у меня соединений с ком портами будет до 5 штук, то не удобно.
В mainwindow.h объявляю экземпляр класса
ConnectionCom *sPort; //мой класс для соединение с ком портом.
код класса ConnectionCom()
bool ConnectionCom::OpenConCom(QString port, int baudrate, int bits, QString parity, int stopBits, QString flowControl, bool CTS_RTS){
serialPort=new QSerialPort();
serialPort->setPortName(port);
serialPort->setBaudRate(baudrate);
serialPort->setDataBits(QSerialPort::Data8);
serialPort->setParity(QSerialPort::NoParity);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setFlowControl(QSerialPort::NoFlowControl);
if(CTS_RTS==true){
serialPort->setRequestToSend(true);
serialPort->setDataTerminalReady(true);
}
serialPort->open(QIODevice::ReadOnly);
if(serialPort->isOpen()){
return true;
}else{
return false;
}
}
код mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//соединение с сервером БД;
ConnectionSql *sql;
sql=new ConnectionSql();
bool condsql=sql->OpenConnection("192.168.50.100","user_serial","x19z$@");
ui->terminal->append("Проверка доступа к серверу Mysql:........ " + QVariant(condsql).toString());
ui->terminal->append("Провека доступа к локальной БД SQLite:...........");
//coeдинение с com port
connect(ui->actionSwelab_Alfa_1, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
connect(ui->actionSwelab_Alfa_2, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
connect(ui->actionMeldonic_1, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
connect(ui->actionUrit_3020, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
// connect(ui->actionSwelab_Alfa_1, SIGNAL(triggered()), this, SLOT(Help()));
// connect(ui->actionSwelab_Alfa_2, SIGNAL(triggered()), this, SLOT(Help()));
// connect(ui->actionMeldonic_1, SIGNAL(triggered()), this, SLOT(Help()));
}
void MainWindow::ComPortConnection(){
QString port;
if(QObject::sender()->objectName()=="actionSwelab_Alfa_1"){
port="COM1";
analizator="Swelab";
}
if(QObject::sender()->objectName()=="actionSwelab_Alfa_2"){
port="COM3";
analizator="Swelab";
}
if(QObject::sender()->objectName()=="actionMeldonic_1"){
port="COM6";
analizator="Medonic";
}
if(QObject::sender()->objectName()=="actionUrit_3020"){
analizator="Urit3020";
port="COM6";
}
sPort=new ConnectionCom();
if(sPort->OpenConCom(port, 9600, 8,"none", 1, "none", false)==true){
connect(sPort->serialPort,SIGNAL(readyRead()),this,SLOT(ReadDataSerial()));
}
}
void MainWindow::ReadDataSerial(){
QString byte;
byte=sPort->serialPort->readAll();
qDebug()<<sPort->serialPort->portName()+":"+byte;
}
Как сделать, чтобы все коннекты ссылались на 1 слот чтения данных, и дебаг отображал данные со всех портов?