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){ /* ... */ });
注:信號與槽函數最好不要重載