从qt中继承表单的最佳方法

sma*_*llB 3 c++ inheritance qt

从qt设计器中创建的表单继承的最佳方式是什么?

Rai*_*aiv 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);
}
Run Code Online (Sandbox Code Playgroud)

另外,如果你想添加一些其他形式,这也是可能的,你应该做一些额外的工作:

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);
}
Run Code Online (Sandbox Code Playgroud)

另请注意,派生类不会更改基类形式,而是扩展它.您将无法在表单构造函数中向基本表单添加或删除项目,但您指定为占位符的容器将填充派生类的表单数据.