新建 Qt Widget 项目命名为“WeighBridge”
配置文件里加入串口支持,如下:
QT += core gui serialport
在mainwindow.h里加入开启串口读取的SLOT,如下:
mainwindow.h头文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSerialPort>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void openSerialPort();
private:
Ui::MainWindow *ui;
QSerialPort *m_serial = nullptr;
initActionsConnections();
readWeighBridgeData();
putWeighBridgeData(QByteArray &wbd);
QByteArray weighBridgeData;
};
#endif // MAINWINDOW_H
mainwindow.cpp文件:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_serial = new QSerialPort();
initActionsConnections();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::openSerialPort()
{
m_serial->setPortName("COM3");
m_serial->setBaudRate(2400);
m_serial->open(QIODevice::ReadWrite);
}
MainWindow::initActionsConnections()
{
connect(m_serial, &QSerialPort::readyRead, this, &MainWindow::readWeighBridgeData);
this->openSerialPort();
this->readWeighBridgeData();
}
MainWindow::readWeighBridgeData()
{
QByteArray data = m_serial->readAll();
this->putWeighBridgeData(data);
}
MainWindow::putWeighBridgeData(QByteArray &wbd)
{
weighBridgeData.append(wbd);
if(weighBridgeData.length()>20){
QString qqba = QString(weighBridgeData);
qqba = qqba.mid(qqba.indexOf("\u0002")+1,-1);
if(qqba.length()>6){
qDebug()<< qqba.mid(0,6).toFloat()/100;
}
weighBridgeData.clear();
}
}
运行后控制台会显示地磅读数