Qt5信號與槽新寫法


1 Qt4信號槽寫法:

connect(obj1, SIGNAL(fun1(param1, param2,...)), obj2, SLOT(fun2(param1,...))); 

//編譯后

connect(obj1, "fun1(param1, param2,...)", obj2, "fun2(param1,...)");

問題:在程序編譯階段,程序會將函數以字符串的形式進行鏈接,程序不會檢查信號/槽函數是否存在,只有在運行期間才會驗證是否正確

2 Qt5信號槽新寫法:

connect(obj1, &ClassA::fun1, obj2, &ClassB::fun2);

好處:編譯期間就會檢查信號與槽是否存在,參數類型檢查,Q_OBJECT是否存在,槽函數不在限定必須是slot,可以是普通的函數、類的普通成員函數、lambda函數

問題:函數重載,有可能會造成程序的困擾,不知道該具體鏈接哪個

3 函數重載時解決方法,使用Qt4的語法,指明參數類型和數量。

也可使用函數指針,如下:

  connect(comboBox, static_cast<void(QComboBox::*)(int)>(&QComboBox::activated),
      [=](int index){ /* ... */ });

注:信號與槽函數最好不要重載

 


免責聲明!

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



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