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