2011-07-07 23 views

答えて

3

フォーム自体を継承する良い直接的な方法はありません。フォーム用に作成されたクラスを継承する方がよいでしょう。

1)基本クラスの子UI(一部のコンテナ)

のプレースホルダを指定します。あなたも可能である他のいくつかのフォームを、追加したい場合は

class testBase : public QWidget 
{ 
    Q_OBJECT 

public: 
    testBase (QWidget *parent = 0); 
    ~testBase(); 

protected: // here was private 
    Ui::testBaseClass baseUi; // rename this 
}; 

testBase ::testBase (QWidget *parent) 
    : QWidget(parent) 
{ 
    ui.setupUi(this); 
} 

も、あなたには、いくつかの追加作業を行う必要があります

2)ウィザードで子フォームを作成します。基本クラスを祖先に渡さないでください。ウィザードでは、QWidgetから継承すると言ってください。

3)派生クラスのフォームを作成した後、派生したものをあなたのベースになるように書き直します。コンストラクタを変更 、ラインui.setupUi(this)はまた、派生クラスは、ベースクラスの形式を変更しないことに注意ui.setupUi(baseUi.placeholder)

class testDerived : public testBase 
{ 
    Q_OBJECT 

public: 
    testDerived (QWidget *parent = 0); 
    ~testDerived(); 

private: 
    Ui::testDerivedClass ui; 
}; 

testDerived::testDerived(QWidget *parent) 
    : testBase (parent) 
{ 
    ui.setupUi(baseUi.placeholder); 
} 

に変更する必要があり、それを拡張します。フォームコンストラクタで基本フォームに項目を追加または削除することはできませんが、プレースホルダとして指定したコンテナは派生クラスのフォームデータで埋められます。

+0

QtCreatorでも継承アプローチをサポートしています。それは、それ自体から継承するのではなく、QtDesignerが生成したフォームクラスから継承します。 –

+0

まあ、あなたはそのクラスを継承するかもしれません。それは悪いアプローチです。それは名前のあいまいさや他の厄介なものを引き起こすでしょう。決して固定されていません - 良い方法はありません – Raiv

+0

あいまいさはどれですか?私はそれが一般的に継承よりも壊れやすい方法を見ません。 http://doc.qt.nokia.com/latest/designer-using-a-ui-file.htmlも参照してください。 (btw、個人的に私はポインタからフォームへのアプローチを好む、私はあなたの主張に疑問を呈していた) –

関連する問題