QT--QSocketNotifier類介紹


 

 

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)));
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM