前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QT--QSocketNotifier类介绍

QT--QSocketNotifier类介绍

作者头像
杨源鑫
发布2019-07-04 15:47:09
1.7K0
发布2019-07-04 15:47:09
举报
文章被收录于专栏:嵌入式开发圈嵌入式开发圈

QSocketNotifier 用来监听系统文件操作,将操作转换为Qt事件进入系统的消息循环队列。并调用预先设置的事件接受函数,处理事件。

一共存在3类事件:read,write,exception.

每个QSocketNotifie对象只能监听一个事件,如果要同时监听两个以上事件必须创建两个以上的监听对象。

代码语言:javascript
复制
1QSocketNotifier::QSocketNotifier ( int socket, Type type, QObject * parent = 0 );

下面将说明如何使用 QSocketNotifier 来监听串口数据:

在使用 open 方法打开串口并设置好属性后,可以使用 Qt 的类 QSocketNotifier 来监听串口是否有数据可读,它是事件驱动的, 配合 Qt 的 signal/slot 机制,当有数据可读时,QSocketNotifier 就会发射ativated 信号,你只需要创建一个 slot 连接到该信号即可,代码如下所示:

代码语言:javascript
复制
1m_fd = openSerialPort();
2if (m_fd < 0)
3
4{
5      QMessageBox::warning(this, tr("Error"), tr("Fail to open serial port!"));
6     return ;
7}
8m_notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
9connect (m_notifier, SIGNAL(activated(int)), this, SLOT(remoteDataIncoming()));

在上述代码中,我们首先使用上面封装的 openSerialPort 函数打开串口并配置串口属性,接着我们用m_fd 和 QSocketNotifier::Read 作为参数构造了一个 QSocketNotifier 的实例,QSocketNotifier::Read 参数表示我们需要关心串口的可读状态,最后将 QSocketNotifier 实例的

activated 信号连接到 remoteDataIncoming slot,当有数据可读时,remoteDataIncoming slot 会被调用。

下面是 remoteDataIncoming slot 的代码,它的代码比较简单,只是调用 read 函数读取串口数据,

然后将数据显示到界面上:

代码语言:javascript
复制
1void TMainForm::remoteDataIncoming()
2{
3   char c;
4   if (read(m_fd, &c, sizeof c) != 1) {
5      QMessageBox::warning(this, tr("Error"), tr("Receive error!"));
6      return;
7   }
8   m_receiveEdit->insert(QString(QChar(c)));
9}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式开发圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档