QT下 QSocketNotifier 类的使用

转载 2013年12月02日 11:08:26

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 socket, Type type, QObject * 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)));

}

QSocketNotifier的本质是监听驱动数据,所以驱动要实现poll函数,实现阻塞才可以,这是个人的理解。

相关文章推荐

QSocketNotifier 实现文件监控(demo Linux系统U盘插拔监控)

QSocketNotifier 类提供了对文件的监控活动的支持。 QSocketNotifier 类使Qt的事件循环和文件描述器的事件循环结合起来成为可能。文件描述器的动作可以被Qt的主事件循环( Q...

Qt中QDockWidget类的使用实例

  • 2013年07月24日 12:09
  • 10KB
  • 下载

Qt5.5 QFileDialog类的使用方法

头文件:#include Pro文件:Qt += widgets使用QFileDialog有两种方法,一种是比较简单的使用“静态函数法”,另一种是可以自定义各个细节的“构造函数法”。第一种:静态函数...

QT5中使用QFtp类

  • 2016年10月09日 18:40
  • 519KB
  • 下载

QT中QString 类的使用--获取指定字符位置、截取子字符串等

QT中QString 类的使用 QString 类中各函数的作用。 一、字符串连接函数。 1、QString也重载的+和+=运算符。这两个运算符可以把两个字符串连接到一起。      2、QSt...
  • haiross
  • haiross
  • 2015年11月16日 09:49
  • 39810

QT中 QComboBox 类中常见函数与信号的使用

QComboBox插件是一个集按钮和下拉菜单于一体的插件。 QComboBox在占用最小屏幕空间的情况下为用户提供一个下拉菜单选项。 QComboBox在显示当前选项的同时还弹出一系列可选...
  • sbisyju
  • sbisyju
  • 2013年03月20日 16:28
  • 19345

Qt5 中的QPainterPath类的功能和使用方法

用途:它是由一些图形如曲线、矩形、椭圆组成的对象。主要的用途是,能保存已经绘制好的图形。实现图形元素的构造和复用;图形状只需创建一次,然后调用QPainter::drawPath()函数多次绘制。pa...

Qt 中QString类相关函数的使用(2)

QString 类中各函数的作用。 一、字符串连接函数。 1、QString也重载的+和+=运算符。这两个运算符可以把两个字符串连接到一起。      2、QString的append()函数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT下 QSocketNotifier 类的使用
举报原因:
原因补充:

(最多只允许输入30个字)