1. 程式人生 > >不能繼承於QObject的類就一定不能使用信號槽?(用一個代理類進行發射就行了)

不能繼承於QObject的類就一定不能使用信號槽?(用一個代理類進行發射就行了)

-c 問題 ges object 編譯過程 報錯 第三方庫 nal 解決

首先不能繼承QObject的情況在開發中遇到得並不多,筆者在一年多的Qt項目開發中只遇到兩三次。而且都是因為引進了第三方庫導致編譯過程中報錯。

要想解決這個問題其實不難,因為筆者遇到的問題都是想定義一個信號,定義的槽情況沒有遇到過,可以提出一個想法,有需要的朋友試一下。

要想實現信號發送,可以定義一個信號發射器類繼承於QObject,然後在想要發送信息的類裏定義一個信號發射器:

技術分享
圖1 技術分享
圖2

只要在想觸發信號的地方調用信號發射器的sendMsg()函數就可以讓信號發射器將信號發出。

要想實現槽的話,可以同處理信號的方式解決,建立一個信號處理器,將要處理的內容傳入其中即可。

另外還想啰嗦幾句,雖然這個方法是筆者為了解決某些類不能繼承於QObject想到的,但是不只限於解決這一種情形。

在一次項目中,遇到一個問題:很多個(自動添加的)控件,點擊某個控件就將其自帶的信息顯示在一個文本框中,我解決的方案就是將一個信號處理器使用單例模式編寫,在控件的基類中的clicked()響應的槽函數中去調用sendMsg()實現的。

http://www.jianshu.com/p/b0dc50cb0119

不能繼承於QObject的類就一定不能使用信號槽?(用一個代理類進行發射就行了)