以下代码是自己测试门禁系统使用的
主要用到了串口的接收和发送
开发环境:xp QT5.1.1
串口:38400 N 8 1
自动检测可用串口
在xp上测试没问题
有些usb转串口会出现波特率不准的问题,CH340的usb转232使用完全正常
以下为收发的线程.h 和.cpp两个文件
最后附上转sacii显示的代码
如果要参考的话,源代码已上传:http://download.csdn.net/detail/liang890319/6463227
- #ifndef MYTHREAD_H
- #define MYTHREAD_H
-
- #include <QThread>
- #include <stdio.h>
- #include <QtGlobal>
-
- class MyThread : public QThread
- {
- Q_OBJECT
- public:
- QByteArray requestData;
- QByteArray TxData;
- MyThread();
-
- void setMessage(const QString &message);
- void setPortnum(const QString &num);
- void stop();
- void startCom();
- void changeTxState(bool stat);
- void changeRxState(bool stat);
- void changeComState(bool stat);
-
- signals:
- void request(const QString &s);
- void comRecive();
-
-
-
- protected:
- void run();
-
- private:
- QString messageStr;
- QString portnum;
- volatile bool com_opened;
- volatile bool stopped;
- volatile bool tx_event;
- volatile bool rx_event;
- };
-
- #endif // MYTHREAD_H
显示部分 比如收到0xff 在text框显示 FF
- void MainWindow::displayRxData()
- {
- QString str;
- char tmp[100];
- char *buf;
- char var;
- QDateTime *datatime=new QDateTime(QDateTime::currentDateTime());
- if(threadA.requestData.size()>0)
- {
- str="收到数据: ";
- str+=datatime->time().toString();
- ui->textEdit_rx->append(str);
- str.clear();
-
- buf=threadA.requestData.data();
- if(buf[3]==0x01) ui->textEdit_tx->append("加卡成功!");
- if(buf[3]==0x02) ui->textEdit_tx->append("删卡成功!");
- if(buf[3]==0x03) ui->textEdit_tx->append("开门成功!");
- if(buf[3]==0x04) ui->textEdit_tx->append("关门成功!");
- qDebug() << "receive num:" <<threadA.requestData.size();
- for(var=0;var<threadA.requestData.size();var++)
- {
- ::snprintf(tmp,100, "%02X", (unsigned char)(*buf));
- buf++;
- str+=QString::fromUtf8(tmp);
- str+=" ";
- }
- ui->textEdit_rx->append(str);
- }
- threadA.requestData.clear();
- }
QT5 串口收发实例代码
原文:http://www.cnblogs.com/wanghuaijun/p/6132680.html