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

时间:2011-07-07 08:40:58

标签: c++ qt inheritance

从qt designer中创建的表单继承的最佳方法是什么?

1 个答案:

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

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