Qt5利用函式指標來區分訊號

2021-06-15 02:59:38 字數 1633 閱讀 6897

在qt5中訊號與槽的連線針對qt4有一些改變

qt4中的連線方式是類似這樣的:

qobject::connect(const qobject * sender, const char * signal, const qobject * receiver, const char * method, qt::connectiontype type = qt::autoconnection)

qt5中則是這樣的:

qobject::connect(const qobject * sender, pointertomemberfunction signal, const qobject * receiver, pointertomemberfunction method, qt::connectiontype type)

qt5中是直接利用類名來使用訊號/槽函式。

假如我的類中定義了兩個訊號:

signals:

void mysignal(int inum);

void mysignal(int inum, const qstring& str);

我們可以看到這兩個訊號函式實際上是過載函式。

在qt4中這並不會產生任何問題:

connect(this, signal(mysignal(int)), this, slot(myslot()));

connect(this, signal(mysignal(int, qstring)), this, slot(myslot()));

他能指明我們傳送的是哪乙個訊號。

但是在qt5中,就不一樣了:

connect(this, &***::mysignal, this, &***::myslot);

這樣呼叫我們傳送的到底是

mysignal(int inum);

還是

mysignal(int inum, const qstring& str);

這樣就會產生歧義,那麼我們該如何解決這樣問題呢?

我們可以利用函式指標來區分這兩個訊號函式:

void (***::*mynewsignal) (int inum, const qstring& str) = &***::mysignal;

再次呼叫:

connect(this, &***::mysignal, this, &***::myslot);

connect(this, &***::mynewsignal, this, &***::myslot);

這樣就能區分我們傳送的到底是哪乙個訊號了。

Qt5 使用QtCreator來執行NS3的指令碼

問題提出 現在的情況是,我們使用qt5來進行圖形使用者介面的設計,使用ns3 平台來完成指令碼的執行,實現 模擬。然而,如何使用qt5來直接執行ns3中的指令碼呢?問題解決 有兩種解決方法。第一種方法是直接按照下面這個鏈結中的方法進行 在第二種方法中,鏈結所給網頁介紹了如何執行first.cc,如果...

Qt5位置相關函式

專案名稱 geometry 基類 qdialog 類名 geometry 取消 建立介面 在標頭檔案中宣告所需的控制項 主要為qlabel類 及所需要的函式。ifndef geometry h define geometry h include 以下是新增的 include include clas...

QT5入門之15 qr函式

qr是乙個函式,是用於實現國際化的。setwindowtitle tr hello 如果你為這個程式提供了中文翻譯包 其中hello被翻譯成中文 你好 那麼標題將是中文 你好 如果你為程式提供且使用日文翻譯包,那麼text1的內容將是日文。qstring qmetaobject tr const c...