2011-07-07 27 views

回答

3

沒有好的直接方式來繼承表單本身,你最好繼承爲表單創建的類。

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); 
} 

另外,如果你想添加一些其他的形式,這也有可能,你應該做一些額外的工作:

1)指定在基類子UI(一些容器)

的佔位符

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。 (順便說一句,我個人更喜歡指針到表單的方法;我只是質疑你的說法) –