QSocketNotifier 用來監(jiān)聽系統(tǒng)文件操作,將操作轉換為Qt事件進入系統(tǒng)的消息循環(huán)隊列,。并調用預先設置的事件接受函數,,處理事件,。 一共存在3類事件:read,write,exception.
每個QSocketNotifie對象只能監(jiān)聽一個事件,如果要同時監(jiān)聽兩個以上事件必須創(chuàng)建兩個以上的監(jiān)聽對象,。 QSocketNotifier::QSocketNotifier ( int socket, Type type, QObject * parent = 0 );
下面將說明如何使用 QSocketNotifier 來監(jiān)聽串口數據: { 在上述代碼中,我們首先使用上面封裝的 openSerialPort 函數打開串口并配置串口屬性,接著我們 用 m_fd 和 QSocketNotifier::Read 作為參數構造了一個 QSocketNotifier 的實例, QSocketNotifier::Read 參數表示我們需要關心串口的可讀狀態(tài),最后將 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))); } |
|