include($${PWD}/../src/qserialdeviceenumerator/qserialdeviceenumerator.pri) # include($${PWD}/../src/qserialdevice/qserialdevice.pri)
qmake -set QMAKEFEATURES /path/to/QWT/features # qwt.prf
CONFIG += qwt
//mainwindow.h #include <serialdeviceenumerator.h> ... class MainWindow : public QMainWindow { ... private slots: void procEnumerate(const QStringList &l); ... private: ... SerialDeviceEnumerator *enumerator; ... void initEnumerator(); void deinitEnumerator(); }; //mainwindow.cpp void MainWindow::initEnumerator() { this->enumerator = new SerialDeviceEnumerator(this); connect(this->enumerator, SIGNAL(hasChanged(QStringList)), this, SLOT(procEnumerate(QStringList))); this->enumerator->setEnabled(true); } void MainWindow::deinitEnumerator() { if (this->enumerator && this->enumerator->isEnabled()) this->enumerator->setEnabled(false); }
//mainwindow.h namespace Ui { class MainWindow; class MainWindow : public QMainWindow { private: ... QComboBox *portBox; }; } //mainwindow.cpp void MainWindow::createToolBars() { portBox = new QComboBox(ui->tb); portBox->setObjectName("Ports"); ui->tb->addWidget(portBox); ... } void MainWindow::procEnumerate(const QStringList &l) { portBox->clear(); portBox->addItems(l); }
//mainwindow.h #include <serialdeviceenumerator.h> ... class MainWindow : public QMainWindow { ... private slots: void procEnumerate(const QStringList &l); void slotPrintAllDevices(const QStringList &list) ... }; //mainwindow.cpp void MainWindow::initEnumerator() { this->enumerator = new SerialDeviceEnumerator(this); connect(this->enumerator, SIGNAL(hasChanged(QStringList)), this, SLOT(procEnumerate(QStringList))); connect(this->enumerator, SIGNAL(hasChanged(QStringList)), this, SLOT(slotPrintAllDevices(QStringList))); this->enumerator->setEnabled(true); } void slotPrintAllDevices(const QStringList &list) { qDebug() << "\n ===> All devices: " << list; // foreach (QString s, list) { this->enumerator->setDeviceName(s);// , qDebug() << "\n <<< info about: " << this->enumerator->name() << " >>>"; qDebug() << "-> description : " << this->enumerator->description(); ... qDebug() << "-> is busy : " << this->enumerator->isBusy(); }
//mainwindow.h #include <abstractserial.h> ... class MainWindow : public QMainWindow { ... private slots: ... void procSerialMessages(const QString &msg, QDateTime dt); void procSerialDataReceive(); void printTrace(const QByteArray &data); void RecToFile(QPointF point); ... void procControlButtonClick(); private: ... AbstractSerial *serial; QAction *controlButton; ... void initSerial(); void deinitSerial(); }; //mainwindow.cpp void MainWindow::createToolBars() { ... ui->tb->addAction(controlButton); ... } void MainWindow::initSerial() { this->serial = new AbstractSerial(this); connect(this->serial, SIGNAL(signalStatus(QString,QDateTime)), this, SLOT(procSerialMessages(QString,QDateTime))); connect(this->serial, SIGNAL(readyRead()), this, SLOT(procSerialDataReceive())); // this->serial->enableEmitStatus(true); } void MainWindow::deinitSerial() { if (this->serial && this->serial->isOpen()) this->serial->close(); }
void MainWindow::procControlButtonClick() { this->serial->setDeviceName(portBox->currentText()); if (!port->open(AbstractSerial::ReadOnly | AbstractSerial::Unbuffered)) { qDebug() << "Serial device by default: " << port->deviceName() << " open fail."; return; } // qDebug() << "= Default parameters ="; qDebug() << "Device name : " << port->deviceName(); qDebug() << "Baud rate : " << port->baudRate(); qDebug() << "Data bits : " << port->dataBits(); qDebug() << "Parity : " << port->parity(); qDebug() << "Stop bits : " << port->stopBits(); qDebug() << "Flow : " << port->flowControl(); qDebug() << "Total read timeout constant, msec : " << port->totalReadConstantTimeout(); qDebug() << "Char interval timeout, usec : " << port->charIntervalTimeout(); // , : qDebug() << "List of possible baudrates : " << port->listBaudRate(); ... qDebug() << "List of possible baudrates : " << port->listFlowControl(); // : if (!port->setBaudRate(AbstractSerial::BaudRate9600)) { qDebug() << "Set baud rate " << AbstractSerial::BaudRate115200 << " error."; return; }; if (!port->setDataBits(AbstractSerial::DataBits8)) { qDebug() << "Set data bits " << AbstractSerial::DataBits8 << " error."; return; } if (!port->setParity(AbstractSerial::ParityNone)) { qDebug() << "Set parity " << AbstractSerial::ParityNone << " error."; return; } if (!port->setStopBits(AbstractSerial::StopBits1)) { qDebug() << "Set stop bits " << AbstractSerial::StopBits1 << " error."; return; } if (!port->setFlowControl(AbstractSerial::FlowControlOff)) { qDebug() << "Set flow " << AbstractSerial::FlowControlOff << " error."; return; } }
void MainWindow::procSerialDataReceive() { if (this->serial && this->serial->isOpen()) { QByteArray byte = this->serial->readAll(); this->printTrace(byte, true); } } void MainWindow::printTrace(const QByteArray &data) { textEdit->insertPlainText(QString(data)); }
void MainWindow::procSerialMessages(const QString &msg, QDateTime dt) { QString s = dt.time().toString() + " > " + msg; textEdit->appendPlainText(s); }
//mainwindow.cpp void MainWindow::procSerialDataReceive() { if (this->serial && this->serial->isOpen()) { QByteArray byte = this->serial->readAll(); this->printTrace(byte); // if(byte.at(0)!='\n') { dataArray.append(byte); // } else { if(dataArray.at(0)=='C') // { if(dataArray.at(3) == '0') // { double elapsed = (plot -> dclock_elapsed())/ 1000.0;// QByteArray u; for(int j=5;j<9;j++) { if(dataArray.at(j)!='\r') u[j-5]= dataArray.at(j); // } QPointF point(elapsed,u.toDouble()*5/1024); // plot ->appendPoint(point);// RecToFile(point);// } } dataArray = 0; } } } void MainWindow::RecToFile(QPointF point) { QFile f("test.dat"); if (f.open(QIODevice::Append | QIODevice::Text)) { QTextStream out(&f); out << point.x() << "\t" << point.y() << "\n"; f.close(); } else { qWarning("Can not open file test.dat"); } //plot.cpp void Plot::appendPoint(QPointF point) { CurveData *data = static_cast<CurveData *>(d_curve->data()); data->append(point); const int numPoints = data->size(); if ( numPoints > d_paintedPoints ) { ... d_directPainter->drawSeries(d_curve, d_paintedPoints - 1, numPoints - 1); d_paintedPoints = numPoints; } }
Source: https://habr.com/ru/post/142476/