忙了两三天了,总算得空记录一下QT串口,文末会有总的工程文件上传,多谢大家捧场。
之前博文写过PyQT,目前我逐渐偏向C++了,但主要代码思想没有变,如下:
第一,在QTdesigner下,建立好UI,如下图:
UI细节就不详细说了,具体可以看文末连接的工程文件
第二,新建串口线程类,这里要说明一下,QT本身已有串口类,我这里继承了QThread后,在类内添加串口类成员,代码如下:
#ifndef TASERIALTHREAD_H
#define TASERIALTHREAD_H
#include <QThread>
#include <QtSerialPort>
#include <QSerialPortInfo>
#include <QString>
class TA_SerialThread:public QThread
{
public:
TA_SerialThread();
~TA_SerialThread();
public:
uint8_t portCnt;
QSerialPort *m_arrSerial;//ptr point to an array,maxium port num is 5
public:
void SearchPort(void);
void InitPortName(uint8_t portIndex,const QString &portName);
void InitPortBaudRate(uint8_t portIndex,qint32 baudRate);
void InitPortDataBits(uint8_t portIndex,QSerialPort::DataBits dataBits);
void InitPortParity(uint8_t portIndex,QSerialPort::Parity parity);
void InitPortStopBits(uint8_t portIndex,QSerialPort::StopBits stopBits);
void OpenPort(uint8_t portIndex);
void ClosePort(uint8_t portIndex);
void SendDataBuf(uint8_t portIndex,const QByteArray &str);
QByteArray GetDataBuf(uint8_t portIndex);
private slots:
void run();
};
#endif // TASERIALTHREAD_H
有几处说明,
QSerialPort *m_arrSerial;
指针用于存储多个串口,当串口数组用了
uint8_t portCnt;
用于标记当前串口的总个数
portIndex用于明确对哪个串口操作
第三,新建主窗口类,目的是将ui与底层连接起来,把二者融合在一个类里,类如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "taserialthread.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void MWOnoffPort(void);
void MWSendCmd(void);
void MWReadData(void);
void MWClearRecv(void);
void MWRSNumDisplay(void);
private:
Ui::MainWindow *ui;
TA_SerialThread *sPortThread;
volatile uint32_t m_recvNum;
volatile uint32_t m_sendNum;