qsocketnotifier 用來監聽系統檔案操作,將操作轉換為qt事件進入系統的訊息迴圈佇列。並呼叫預先設定的事件接受函式,處理事件。
一共存在3類事件:read,write,exception.
qsocketnotifier::read
0there is data to be read.
qsocketnotifier::write
1data can be written.
qsocketnotifier::exception
2an 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)
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()
m_receiveedit->insert(qstring(qchar(c)));
qsocketnotifier的本質是監聽驅動資料,所以驅動要實現poll函式,實現阻塞才可以,這是個人的理解。
Qt下TCP程式設計
一 伺服器 1 宣告乙個qtcpserver物件 qtcpserver serverlistener 2 new出物件 this serverlistener new qtcpserver 3 伺服器監聽 qhostaddress ipaddress 192.168.1.1 quint16 ippo...
VS下QT程式設計
參考 1 ui介面,開啟qt designer可以進行編輯,有點像做安卓的layout 2 ui介面所對應的 h 檔案,裡面有你再ui介面各種控制項的 實現 3 工程的 h 檔案,可以宣告你想要實現的操作,新增按鍵對應 槽函式 4 cpp檔案了,可以定義在 h 中宣告的函式,實現對應槽函式。將訊號與...
Qt下TCP程式設計
一 伺服器 1 宣告乙個qtcpserver物件 qtcpserver serverlistener 2 new出物件 this serverlistener new qtcpserver 3 伺服器監聽 qhostaddress ipaddress 192.168.1.1 quint16 ippo...