我有一个项目,我真的想使用Designer来可视化地设计我的向导。
当我第一次这样做时,我将QWizard小部件和每个QWizardPage放在单独的.ui文件中,然后通过调用addPages()构建向导。这工作但很麻烦,因为我的项目突然在向导中每页有一组.h / .cpp / .ui文件。
然后我意识到设计师可以将QWizardPage添加到QWizard本身并“推广”页面,以便我可以使用自己的类功能。有了这个,我只有一个.ui文件用于QWizard,只有两组.h / .cpp文件(一个用于QWizard,一个用于每个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
有没有人尝试过类似于我想要完成的事情并让它发挥作用?