专栏首页嵌入式开发圈QT--QSocketNotifier类介绍

QT--QSocketNotifier类介绍

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

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

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

1QSocketNotifier::QSocketNotifier ( int socket, Type type, QObject * parent = 0 );

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

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

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 函数读取串口数据,

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

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}

本文分享自微信公众号 - 嵌入式开发圈(gh_d6ff851b4069)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言strstr函数解析自定义协议参数

    morixinguan
  • 网络结构与HTML学习笔记

    作为一个嵌入式应用开发者,网页前后端的东西也要了解一点,不需要有多深度,至少别人说了你知道一点,就像我们用算法一样,你不是那个行业的,不专业从事那个行业的...

    morixinguan
  • 嵌入式软件开发必知必会

    进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽...

    morixinguan
  • Power Pivot智能日期运用——连续时间(2)

    返回2018/2/1-2018/6/31日的时间列,但是因为6月份只有30天,所以会自动顺延一天,实际返回的是2018/2/1-2018/7/1的时间列。

    逍遥之
  • 前端学习资料太多,也不是特别的好。

    学习资料这东西肯定是有用的,不管学什么。。但这东西太多了,其实反而有害。因为太多了你就选择困难了,今天看看这个,明天看看那个。你好几百G的视频,音频,文本,pd...

    web前端教室
  • 【处理手记】Configuration system failed to initialize异常的另类原因

    度娘一番,发现市面上常见的原因是配置文件中的特定节点的位置不对,或者配置文件损坏等等,而这个程序根本没有使用内置的配置文件方案,而是用的ini,所以不适用我的问...

    AhDung
  • Power Pivot中DAX的时间函数

    如果数据模型的日期范围是2018/5/1—2019/6/30,则生成的日期表范围为2018/1/1—2019/12/31

    逍遥之
  • iframe 加载外部资源,显示隐藏loading,onload失效

    在项目中使用iframe 来加载外部资源,需要在iframe请求外部资源的时候,需要显示一个loading,在加载完成后,将这个loading隐藏掉,刚开始看到...

    lin_zone
  • iOS开发——Core Graphics绘图

    我们在搭建UI界面时,有很多时候,我们会用到iOS自带的绘图功能来完成一些界面的效果,很常用也很方便。今天我们在这里就一起讨论一下iOS的绘图功能。

    Originalee
  • 单点登录原理与简单实现

    Tanyboye

扫码关注云+社区

领取腾讯云代金券