Подскажите пожалуйста как сделать прием данных с одновременным приемом с n-ым количеством соm портов.
Если можете привести код был бы благодарен.
Проблема в том что я хочу все актион связать с 1 слотом для чтения данных. Если делаю два соединения то в дебаге отображаются только данные последнего соединения.
привожу код:
В mainwindow. h объявил
ConnectionCom *sPort; /экземпляр класса ConnectionCom мой класс
Код ConnectionCom
QSerialPort *serialPort; в ConnectionCom.h
Код ConnectionCom.cpp
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 делаю коннекты action со слотом
connect(ui->actionSwelab_Alfa_1, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
connect(ui->actionSwelab_Alfa_2, SIGNAL(triggered()), this, SLOT(ComPortConnection()));
Слот ComPortConnection
void MainWindow::ComPortConnection(){
QString port;
static QList<QString> data;
if(QObject::sender()->objectName()=="actionSwelab_Alfa_1"){
port="COM1";
analizator="Swelab";
data.append(port);
}
if(QObject::sender()->objectName()=="actionSwelab_Alfa_2"){
port="COM3";
analizator="Swelab";
data.append(port);
}
if(QObject::sender()->objectName()=="actionMeldonic_1"){
port="COM6";
analizator="Medonic";
data.append(port);
}
if(QObject::sender()->objectName()=="actionUrit_3020"){
analizator="Urit3020";
port="COM6";
data.append(port);
}
sPort=new ConnectionCom();
if(sPort->OpenConCom(port, 9600, 8,"none", 1, "none", false)==true){
connect(sPort->serialPort,SIGNAL(readyRead()),this,SLOT(ReadDataSerial())); //коннект для приема данных с ком порта.
}
}
Код ReadDataSerial()
void MainWindow::ReadDataSerial(){
QString byte;
qDebug()<<sPort->serialPort->portName();
//выводятся данные только с com porta к которому подсоединился последним.
}
Подскажите плиз. Думаю проблема в экземпляре класса, скорее всего он перезаписывается. Но если я создаю объект внутри ComPortConnection, то он становится не видимым, в поле действия функции, т.е в ReadDataSerial я не могу вывести sPort->serialPort->portName(). так как объект не доступен. Я только новичок, не ругайте сильно
подскажите плиз!!1