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

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

     
QSocketNotifier::Read 0 There is data to be read.
QSocketNotifier::Write 1 Data can be written.
QSocketNotifier::Exception 2 An exception has occurred. We recommend against using this.

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

QSocketNotifier::QSocketNotifier ( int socketType typeQObject * parent = 0 );

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

{
      QMessageBox::warning(this, tr("Error"), tr("Fail to open serial port!"));
     return ;
}
m_notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
connect (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 函数读取串口数据,
然后将数据显示到界面上:
void TMainForm::remoteDataIncoming()
{
char c;
if (read(m_fd, &c, sizeof c) != 1) {
QMessageBox::warning(this, tr("Error"), tr("Receive error!"));
return;
}
m_receiveEdit->insert(QString(QChar(c)));
}

QT--QSocketNotifier类介绍的更多相关文章

  1. Qt 串口类QSerialPort 使用笔记

    Qt 串口类QSerialPort 使用笔记 虽然现在大多数的家用PC机上已经不提供RS232接口了.但是由于RS232串口操作简单.通讯可靠,在工业领域中仍然有大量的应用.Qt以前的版本中,没有提供 ...

  2. 详解 QT 主要类 QWidget

    QWidget类是所有用户界面对象的基类,每一个窗口部件都是矩形,并且它们按Z轴顺序排列的.一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分. 先来看内容. AD: 2013云计算架构师 ...

  3. Qt Quick 布局介绍

    在 Qt Quick 中有两套与布局管理相关的类库,一套叫作 Item Positioner(定位器),一套叫作 Item Layout(布局). 定位器包括 Row(行定位器).Column(列定位 ...

  4. CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)

    前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...

  5. MediaRecorder类介绍

    audiocallbackvideojavadescriptorencoding 目录(?)[+] 找到个MediaRecorder类介绍和大家分享一下. Mediarecorder类在官网的介绍和在 ...

  6. Object类介绍

    一.Object类介绍

  7. istringstream、ostringstream、stringstream 类介绍 .

    istringstream.ostringstream.stringstream 类介绍 . 转自:http://www.cnblogs.com/gamesky/archive/2013/01/09/ ...

  8. Qt学习之路(1)------Qt常用类用法说明

    Qt常用类 向控制台输出文本 第一个例子,我们采用STL的方式: console.cpp #include <iostream> int main() { std::cout <&l ...

  9. C#中的Dictionary字典类介绍

      Dictionary字典类介绍 必须包含名空间System.Collection.Generic    Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)    键必须是 ...

随机推荐

  1. spfa(模板)

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; int cnt ...

  2. Hadoop 权限管理(转)

    如下图,hadoop访问控制分为两级,其中ServiceLevel Authorization为系统级,用于控制是否可以访问指定的服务,例如用户/组是否可以向集群提交Job,它是最基础的访问控制,优先 ...

  3. Python进阶:set和dict/对象引用、可变性和垃圾回收/元类编程/迭代器和生成器

    frozenset:不可变集合,无序,不重复 dict上的特性: 1. dict的key或者set的值 都必须是可以hash的(不可变对象 都是可hash的, str, fronzenset, tup ...

  4. Data URL scheme 笔记

    0x01起因 今天做CTF的时候,发现一堆数据,大概是这样的 data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAIUAAACFCAYAAAB12js8AAA ...

  5. Single Page Application

    single page web application,SPA,就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序.   单页Web应用(si ...

  6. DataFrame读取CSV文件

    读取csv的代码: print pd.read_csv("ex1.csv") print "\n" print "Can also use read ...

  7. Django Paginator分页器

    如何实现在django中实现分页效果,我使用的是django自带的分页器paginator具体是使用办法是这样的首先引用from django.core.paginator import Pagina ...

  8. python-并发编程之进程

    进程 python中创建进程模块为:multiprocessing 开销非常大 是计算机中资源分配的最小单位(内存隔离) 能利用多个CPU 由操作系统控制 同时操作内存之外的数据会产生数据的不安全 进 ...

  9. grafana初体验

    1.centos版下载安装 wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.4-1.x86_6 ...

  10. IIS 承载的服务失败

    如果 IIS 承载的某个服务失败,则可能会看到以下症状之一: 当浏览到 .svc 文件时,不能识别该文件,浏览器显示空白页,或显示文件的文本而不是服务的帮助页,如下面的示例所示.     <%@ ...