从qt designer中创建的表单继承的最佳方法是什么?
答案 0 :(得分:5)
没有好的直接方式来继承表单本身,你最好继承为表单创建的类。
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);
}
另请注意,派生类不会更改基类形式,而是扩展它。您将无法在表单构造函数中向基本表单添加或删除项目,但您指定为占位符的容器将填充派生类的表单数据。