QT下 QSocketNotifier 類的使用

2021-06-19 11:45:28 字數 1474 閱讀 9517

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...