2011-10-10 29 views
1

私はQWidgetとモデルクラスから派生したクラスを持っています。私の読書に基づいて、私はQObjectから派生するモデルクラスを持つことができません。Qt:基底クラスメソッドを派生クラスのスロットに持っていく

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

モデルクラスMyModelClassはすでににsetWidth(BOOL)などのプロパティを設定する方法を有します。これらのメソッドをスロットとして直接使用することはできないようです。私が宣言した場合:

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

Qtは、実行時にスロットがないことを警告します。setWidth(bool)。各メソッドをPageWidgetに手動で追加する必要があります。Pag​​eWidgetは、単にMyModelClassの同じメソッドを呼び出します。

すべてのメソッドを再宣言することなく、ベースメソッドをスロットに入れる方法はありますか?

+1

はい:複数の継承を使用しないでください:-)あなたはそれが必要であると確信していますか?特にメソッド名の競合がある場合は、多くの苦痛のために自分自身を設定しています。 – Mat

答えて

5

QMetaObject(スロットを使用できるQt部分)と複数の継承は混在しません。 「パススルー」スロットを作成するソリューションは、それを解決する方法です。しかし、あなたが多重継承を行う必要がなければ、私はそれをしません。物の見た目から見ると、PageWidgetがウィジェットとモデルの両方から派生するのは変です。おそらくモデルを含むようにする方が理にかなっています。

+0

これは正しいです。両方のQObjectである2つのクラスから継承することは不可能です。 – Chris

関連する問題