Qt5的connect函數綁定,通過函數名進行綁定,在子類中的問題

本文假定讀者對connect函數使用是沒有問題的

qt5的connect函數,可以通過函數名進行綁定,

QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,const QObject *, PointerToMemberFunction,Qt::ConnectionType);

但是需要注意的是,綁定的函數名只能在類中使用,甚至是子類都無法使用,用protected(只有父類和子類可以使用)也無法使用。這就有問題了。

但是在實際使用過程中,父類耦合太嚴重,在重構過程中,綁定的信號槽函數,開始都是在父類中,整合代碼的時候,綁定方式不一樣,所以需要提出不同的代碼到子類中進行多態整合使用。就出現了需要在子類分別綁定不同信號跟槽的需求,但是這個時候在父類中綁定的函數,在子類中是編譯通不過的,只能修改成public或者通過宏綁定才能成功。但是問題是,設計的好好的封裝槽不能修改成public,強制修改成宏綁定,編譯通過了,但是槽函數無法觸發了。

沒辦法,只能放棄,把函數名綁定的信號槽全部放到父類中綁定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章