【发布时间】:2011-07-07 08:40:58
【问题描述】:
从 qt 设计器中创建的表单继承的最可取的方式是什么?
【问题讨论】:
-
能否详细说明您的问题
-
带有
private类继承IMO。
标签: c++ qt inheritance
从 qt 设计器中创建的表单继承的最可取的方式是什么?
【问题讨论】:
private类继承IMO。
标签: c++ qt inheritance
没有很好的直接继承form本身的方法,你最好继承为form创建的类。
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);
}
还要注意,派生类不会改变基类的形式,它会扩展它。您将无法在表单构造函数中向基本表单添加或删除项目,但您指定为占位符的容器将填充派生类的表单数据。
【讨论】:
class derived: public QWidget, private Ui::SomeForm, private Ui::SomeForm2。这样的双重继承会让人头疼
class derived: public QWidget, private Ui::SomeForm,没有Form2。请注意,Form2 本身并不是一个小部件,所以我认为这并不令人头疼。仅当您在 Form 和派生程序中声明相同的符号时,它才会变得令人头疼,这当然不是一个好习惯。但令人头疼的事情并不是继承固有的。