Qt,QWizard,QWizardPage和Qt Designer

时间:2012-09-10 12:08:35

标签: qt qwidget qt-designer

我有一个项目,我真的想使用Designer来可视化地设计我的向导。

当我第一次这样做时,我将QWizard小部件和每个QWizardPage放在单独的.ui文件中,然后通过调用addPages()构建向导。这工作但很麻烦,因为我的项目突然在向导中每页有一组.h / .cpp / .ui文件。

然后我意识到设计师可以将QWizardPage添加到QWizard本身并“推广”页面,以便我可以使用自己的类功能。有了这个,我只有一个.ui文件用于QWizard,只有两组.h / .cpp文件(一个用于QWizard,一个用于每个QWizardPage)。

所以,我的项目看起来有点像这样:

  • Wizard.ui - 包含向导和的所有GUI元素 相应的页面
  • Wizard.h / .cpp - 包含QWizard派生类的代码
  • WizardPages.h / .cpp - 包含每个QWizardPage的代码

这很棒!直到我开始添加实现。我想要做的第一件事就是在第一页中注册一个字段(比如WizardPage1)。

WizardPage1::WizardPage1(QWidget* parent)
    : QWizardPage(parent)
{
    this->registerField("text*", textLineEdit);
}

但'textLineEdit'实际上是QWizard对象的成员。所以,我想我可以使用QWizardPage的父级注册该字段,但ui_Wizard.h文件中生成的代码创建没有父级的QWizardPage对象。当我尝试这个时:

Wizard::Wizard(QWidget *parent)
    : QWizard(parent)
{
    setupUi(this); // Wizard inherits QWizard and the deginer generated class

    // 'WizardPage1' is also the class name and variable name as
    // generated by Qt
    WizardPage1->setParent(this);
}

但是当我这样做时会导致崩溃:

Wizard* wizard = new Wizard(this);
wizard->open(); // crashes

有没有人尝试过类似于我想要完成的事情并让它发挥作用?

0 个答案:

没有答案