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()));
}
QSocketNotifier的本质是监听驱动数据,所以驱动要实现poll函数,实现阻塞才可以,这是个人的理解。