如何在QWidzard上添加QFrame或QWidget作为QWizardPage
How to add QFrame or QWidget as QWizardPage on QWidzard
我尝试在 QWizard
子类上添加 frame/widget 子类,但向导页面是空白的。我添加了 QMainWindow
子类,它工作正常。
QuickSetupWizard::QuickSetupWizard(QWidget *parent) :
QWizard(parent),
ui(new Ui::QuickSetupWizard)
{
ui->setupUi(this);
mpMainWindow = new MainWindow(); // QMainWindow subclass
mpSource = new Source(); // Source is QFrame subclass
QWizardPage *page = new QWizardPage;
page->setTitle("Conclusion");
QLabel *label = new QLabel("You are now successfully registered");
label->setWordWrap(true);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(label);
layout->addWidget(mpIrigMainWindow);
page->setLayout(layout);
addPage(page); // here able to add mainWindow as wizard page
QWizardPage *page2 = new QWizardPage;
QVBoxLayout *layout2 = new QVBoxLayout;
layout2->addWidget(new QPushButton("xyz"));
layout2->addWidget(mpSource);
page2->setLayout(layout2);
addPage(page2);
}
第二个向导页面只显示一个按钮。框架不存在。 Frame子类我测试没问题
要在向导上添加页面,addPage 方法可用。 但是页面上的 items/widgets 是什么? 因此,如果我想在页面上添加 QPushButton 或 QLabel,在文档中,代码是可用的。 我们将创建布局并使用 addWidget 函数在布局上添加按钮和标签,最后设置该布局 tp QWizardPage。 同样,如果我使用 addWidget 添加一个 QPushButton、一个 QFrame 或 QWidget 到布局,并在 QWizardPage 上设置该布局并将页面添加到 QWizard,则该页面将添加到 QWizard,并且 QPushButton 在页面上也可见,但 QFrame/QWidget 不可见.
我通过创建 QWizardPage 子类解决了这个问题,并在其中创建了 QFrame 并将 QWizardPage 子类作为父类。
SourceSelectionPage::SourceSelectionPage(QWidget *parent) :
QWizardPage(parent),
ui(new Ui::SourceSelectionPage)
{
ui->setupUi(this);
mpSource = new Source(this); // QFrame get added to page
}
/////////////////////////////////////////////
QuickSetupWizard::QuickSetupWizard(QWidget *parent) :
QWizard(parent),
ui(new Ui::QuickSetupWizard)
{
ui->setupUi(this);
mpMainWindow = new MainWindow(); // QMainWindow subclass
QWizardPage *page = new QWizardPage;
page->setTitle("Conclusion");
QLabel *label = new QLabel("You are now successfully registered");
label->setWordWrap(true);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(label);
layout->addWidget(mpIrigMainWindow);
page->setLayout(layout);
addPage(page); // here able to add mainWindow as wizard page
SourceSelectionPage *page2 = new SourceSeleCtionPage();
addPage(page2);
}