如何在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);
 }