2011-10-10 106 views
1

我有一個派生自QWidget和模型類的類。根據我的閱讀,我不能讓模型類從QObject派生。Qt:將基類方法帶入派生類中的插槽

class PageWidget : public QWidget, 
     public MyModelClass 
{ 
... 
}; 

模型類MyModelClass已經有方法來設置,例如setWidth(布爾)屬性。看來我不能直接使用這些方法作爲插槽。如果我聲明:

QObject :: connect(button,SIGNAl(dataChanged(bool)),this,SLOT(setWidth(bool)));

Qt在運行時抱怨沒有插槽setWidth(布爾)。我必須手動將每個方法添加到PageWidget中,該方法只調用MyModelClass的相同方法。

有沒有什麼方法可以將基礎方法插入到插槽中,而無需重新聲明每種方法?

+1

是的:不要使用多重繼承:-)你確定你需要它嗎?特別是如果你有方法名稱衝突,你正在爲自己設置很多痛苦。 – Mat

回答

5

QMetaObject(允許您使用插槽的Qt部分)和多重繼承不會混合使用。您創建「傳遞」插槽的解決方案是一種解決方法。但是,如果你不需要做多重繼承,我不會這樣做。僅從外觀上看,PageWidget從Widget和Model中派生出來似乎很奇怪。讓它包含模型可能更有意義。

+0

這是正確的。從兩個都是QObject的類繼承乘法是不可能的。 – Chris