如何在QT中读取qt串口接收数据数据

后使用快捷导航没有帐号?
您尚未登录,请登录后浏览更多内容!
查看: 7244|回复: 15
在线时间87 小时帖子精华0Qter豆560 贡献34 毅力239 注册时间最后登录
Qter2级会员, 积分 273, 距离下一级还需 27 积分
电脑环境是win7,QT是5.3.2。想要请教下各位大哥如何自动获取电脑上可用的串口号。不要那种全部串口号然后一个一个去试的那种,这个太傻了。我想要的是比如读读电脑的注册表信息之类的或者其他方法。
请知道的大大写下可以通过编译的源码给我啊,谢谢。不要直接说,要代码,一定要代码。
另外如果高手些的话也请写下linux版的。万分感谢。
是啊。Qt 5自带了串口类,有函数可以获取可用串口的。
其实咱们的串口助手也可以在Qt 5编译通过的。
在线时间393 小时帖子精华4Qter豆3132 贡献143 毅力566 注册时间最后登录
Qter豆3132
cai901022 发表于
郁闷,最后还是自己解决了,QT5有自带的串口类。
是啊。Qt 5自带了串口类,有函数可以获取可用串口的。
其实咱们的串口助手也可以在Qt 5编译通过的。
&站长,,是哪个函数可以获得可用的串口啊?&
在线时间87 小时帖子精华0Qter豆560 贡献34 毅力239 注册时间最后登录
Qter2级会员, 积分 273, 距离下一级还需 27 积分
还有个忘记说了,我要QT5版本的,不要QT4或者以下的,最好要最新的。网上我知道百度文库有这个方法,不过那个有点小bug,我希望要最新的,没有bug那种
在线时间87 小时帖子精华0Qter豆560 贡献34 毅力239 注册时间最后登录
Qter2级会员, 积分 273, 距离下一级还需 27 积分
郁闷,最后还是自己解决了,QT5有自带的串口类。
在线时间87 小时帖子精华0Qter豆560 贡献34 毅力239 注册时间最后登录
Qter2级会员, 积分 273, 距离下一级还需 27 积分
串口通信在嵌入式设备开发中非常常用,在Qt5之前,要实现串口通信,需要借助第三方串口封装代码,QT5已经自带了类来完成这项工作。
代码如下:
//1. [代码]在pro文件中添加& &&&
//QT& && & += serialport
///引入头文件
#include &QtSerialPort/QSerialPort&
#include &QtSerialPort/QSerialPortInfo&
//[代码]初始化& &&&
& & my_serialport-&setPortName(ComName);
& & my_serialport-&setBaudRate(9600);
& & my_serialport-&setDataBits(QSerialPort:ata8);
& & my_serialport-&setParity(QSerialPort::NoParity);
& & my_serialport-&setStopBits(QSerialPort::OneStop);
& & my_serialport-&setFlowControl(QSerialPort::NoFlowControl);
附上一段完整的实例代码:
#include &widget.h&
#include &QApplication&
int main(int argc, char *argv[])
& & QApplication a(argc, argv);
& & w.show();
& & return a.exec();
widget.h widget.cpp
#ifndef WIDGET_H
#define WIDGET_H
#include &QWidget&
#include &QtSerialPort/QSerialPort&
#include &QtSerialPort/QSerialPortInfo&
#include &QTimer&
namespace Ui {
class Widget : public QWidget
& & Q_OBJECT
& & explicit Widget(QWidget *parent = 0);
& & ~Widget();
private slots:
& & void on_pushButton_cmopen_clicked();
& & void updateAA();
& & void on_pushButton_send_clicked();
& & Ui::Widget *
& & QSerialPort *my_
& & QByteArray requestD
& & QTimer *
#endif // WIDGET_H
#include &widget.h&
#include &ui_widget.h&
#include &QtSerialPort/QSerialPort&
#include &QtSerialPort/QSerialPortInfo&
#include &QDebug&
#include &QTimer&
Widget::Widget(QWidget *parent) :
& & QWidget(parent),
& & ui(new Ui::Widget)
& & ui-&setupUi(this);
& & foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
& && &&&qDebug() && &Name& && &&&: & && info.portName();
& && &&&qDebug() && &Description : & && info.description();
& && &&&qDebug() && &Manufacturer: & && info.manufacturer();
& && &&&// Example use QSerialPort
& && &&&QSerialP
& && &&&serial.setPort(info);
& && &&&if (serial.open(QIODevice::ReadWrite))
& && && && &ui-&comboBox-&addItem(info.portName());
& && && && &serial.close();
Widget::~Widget()
void Widget:n_pushButton_cmopen_clicked()
& & my_serialport= new QSerialPort();
& & qDebug()&&ui-&comboBox-&currentText();
& & my_serialport-&setPortName(ui-&comboBox-&currentText());
& & my_serialport-&open(QIODevice::ReadWrite);
& & qDebug()&&ui-&lineEdit-&text().toInt();
& & my_serialport-&setBaudRate(ui-&lineEdit-&text().toInt());
& & my_serialport-&setDataBits(QSerialPort:ata8);
& & my_serialport-&setParity(QSerialPort::NoParity);
& & my_serialport-&setStopBits(QSerialPort::OneStop);
& & my_serialport-&setFlowControl(QSerialPort::NoFlowControl);
& & timer = new QTimer(this);
& & connect(timer, SIGNAL(timeout()), this, SLOT(updateAA()));
& & timer-&start(1000);
void Widget::updateAA()
& & requestData = my_serialport-&readAll();
& & if(requestData!= NULL)
& && &&&ui-&textEdit-&append(requestData);
& & requestData.clear();
void Widget:n_pushButton_send_clicked()
& & QByteArray TxData = &aaaa&;
& & my_serialport-&write(TxData);
在线时间87 小时帖子精华0Qter豆560 贡献34 毅力239 注册时间最后登录
Qter2级会员, 积分 273, 距离下一级还需 27 积分
问题自己解决了,本来想应该有人随便回答下然后送他十分的,竟然没人要。难道还要我附上答案
在线时间1 小时帖子精华0Qter豆19 贡献10 毅力4 注册时间最后登录
Qter1级会员, 积分 14, 距离下一级还需 86 积分
楼主是个靠谱人,此篇我应该会用到!
在线时间0 小时帖子精华0Qter豆15 贡献10 毅力2 注册时间最后登录
Qter1级会员, 积分 12, 距离下一级还需 88 积分
感谢楼主!!这个我用得上!!谢谢
在线时间204 小时帖子精华0Qter豆1017 贡献54 毅力258 注册时间最后登录
Qter3级会员, 积分 312, 距离下一级还需 488 积分
Qter豆1017
楼主能把你的这个全套程序发我一下吗 我现在也在做这个 用的QT5.3,很急很急!! 谢谢楼主了!
在线时间87 小时帖子精华0Qter豆560 贡献34 毅力239 注册时间最后登录
Qter2级会员, 积分 273, 距离下一级还需 27 积分
楼主能把你的这个全套程序发我一下吗 我现在也在做这个 用的QT5.3,很急很急!! 谢谢楼主了! ...
可以,我上传上去吧,你自己去下载,稍等我下
注册账号后积极上传头像的会员
坚持登陆,持之以恒!
积极发帖的会员
Powered by
X2.5. Theme By简述如何在Qt中实现串口通信
用圣才电子书APP或微信扫一扫,在手机上阅读本文,也可分享给你的朋友。
本文所将内容是在Qt中实现串口通信,文字描述不多,基本上是代码实现。之前本人做过类似的小程序,不过那个是基于线程的。那么接下来看看本篇文字吧!
首先,加入了&打开串口&,&关闭串口&&传送数据&三个按钮,加入了一个行编辑框Line Edit。它们的命名如下:
&打开串口&按钮命名为:openMyComBtn
&关闭串口&按钮命名为:closeMyComBtn
&传送数据&按钮命名为:sendMsgBtn
要传送数据的行编辑框命名为:sendMsgLineEdit
界面如下图。
第二步,在&打开串口&按钮上右击,选择Go to slot选项,然后选择clicked()选项,进入它的单击事件槽函数中,将上个程序中在构造函数里写的语句全部剪切到这里。然后加入几句按钮的状态设置语句。如下:
1.void&MainWindow::on_openMyComBtn_clicked() &
3.struct&PortSettings&myComSetting&=&{BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500}; &
4.//定义一个结构体,用来存放串口各个参数 &
5.myCom&=&new&Win_QextSerialPort(&com1&,myComSetting,QextSerialBase::EventDriven); &
6.//定义串口对象,并传递参数,在构造函数里对其进行初始化 &
7.myCom&-open(QIODevice::ReadWrite); &
8.//以可读写方式打开串口 &
9.connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom())); &
10.//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作 &
12.ui-openMyComBtn-setEnabled(false);&//打开串口后&打开串口&按钮不可用 &
13.ui-closeMyComBtn-setEnabled(true);&//打开串口后&关闭串口&按钮可用 &
14.ui-sendMsgBtn-setEnabled(true);&//打开串口后&发送数据&按钮可用 &
然后在构造函数里也添加几句按钮初始状态设置语句,如下:
1.MainWindow::MainWindow(QWidget&*parent) &
2.:&QMainWindow(parent),&ui(new&Ui::MainWindow) &
4.ui-setupUi(this); &
5.ui-closeMyComBtn-setEnabled(false);&//开始&关闭串口&按钮不可用 &
6.ui-sendMsgBtn-setEnabled(false);&//开始&发送数据&按钮不可用 &
更改后程序如下图所示:
这时运行程序,效果如下:
第三步,按上面的方法进入&关闭串口&按钮和&发送数据&按钮的单击事件的槽函数,更改如下。
1.void&MainWindow::on_closeMyComBtn_clicked()&&&&&&//关闭串口槽函数 &
3.myCom-close();&&&&&//关闭串口,该函数在win_qextserialport.cpp文件中定义 &
4.ui-openMyComBtn-setEnabled(true);&//关闭串口后&打开串口&按钮可用 &
5.ui-closeMyComBtn-setEnabled(false);&//关闭串口后&关闭串口&按钮不可用 &
6.ui-sendMsgBtn-setEnabled(false);&//关闭串口后&发送数据&按钮不可用 &
8.void&MainWindow::on_sendMsgBtn_clicked()&&&&&&&//发送数据槽函数 &
10.myCom-write(ui-sendMsgLineEdit-text().toAscii());&&&& &
11.//以ASCII码形式将行编辑框中的数据写入串口 &
最终效果如下:
(将数据x发送给单片机,单片机返回you send message is : x)
小结:关于在Qt中实现串口通信的内容就说这么多,由于之前做过类似的小程序,所以比较感兴趣,希望你能用到呢这方面的知识。
&来源:网络
小编工资已与此赏挂钩!一赏一分钱!求打赏↓ ↓ ↓
如果你喜欢本文章,请赐赏:
已赐赏的人
我的电子书linux(62)
使用 cat /dev/ttySAC1
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:195276次
积分:5293
积分:5293
排名:第3783名
原创:338篇
评论:32条
阅读:5536
阅读:3480
文章:12篇
阅读:6764
阅读:16456
(1)(9)(3)(7)(11)(3)(2)(4)(6)(4)(5)(14)(12)(17)(13)(11)(9)(6)(5)(2)(1)(1)(21)(47)(19)(15)(8)(24)(61)(2)(2)(1)(1)当前位置: →
→ 求教qt从串口中得到一串数据,怎么从中获取指定数据
求教qt从串口中得到一串数据,怎么从中获取指定数据
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: 求教qt从串口中得到一串数据,如何从中获取指定数据在用qt制作串口时,碰到这样一个问题:将数据从缓存区读出,转化成字符串,...
"求教qt从串口中得到一串数据,怎么从中获取指定数据"::
求教qt从串口中得到一串数据,如何从中获取指定数据在用qt制作串口时,碰到这样一个问题:将数据从缓存区读出,转化成字符串,然后用.mid()函数获得指定数据,但获得的数据有问题。求各位大侠传授一个好的方法
&&&&qbytearray&temp&=&mycom-&readall();
&&&&qstring&
&&&&qstring&str1;
&&&&/*十六进制数据显示
&&&&for(int&i&=&0;&i&&&temp.count();&i++){
&&&&&&&&qstring&s;
&&&&&&&&s.sprintf("0x%02x&",&(unsigned&char)temp.at(i));
&&&&&&&&buf&+=&s;
&&&&ui-&textedit-&append(buf);
&&&&qtextcursor&cursor&=&ui-&textedit-&textcursor();
&&&&ui-&textedit-&insertplaintext(temp);
&&&&cursor.moveposition(qtextcursor::end);
&&&&ui-&textedit-&settextcursor(cursor);
&&&&buf&=temp.trimmed();
&&&&str1&=&buf.mid(3,&3);
&&&&ui-&textedit-&append(str1);
------解决方案--------------------注意类型的转换------解决方案--------------------串口过来的数据是文本还是二进制,如果是文本可以直接&mid,如果是二进制就要格式化成字符串------解决方案--------------------使用qsocketnotifier吧,没那么麻烦了! 搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
求教qt从串口中得到一串数据,怎么从中获取指定数据_QT开发相关文章
QT开发_总排行榜
QT开发_最新
QT开发_月排行榜
QT开发_周排行榜
QT开发_日排行榜更多数码资讯,请关注南窗数码
“程序通讯”相关经验

我要回帖

更多关于 qt5 串口 大数据 丢失 的文章

 

随机推荐