如何在QWidzard上将QFrame或QWidget添加为QWizardPage

时间:2018-07-26 14:30:01

标签: qt qframe qvboxlayout qwizard qwizardpage

我尝试在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);
}

第二个向导页面仅显示一个按钮。相框不在那里。框架子类没有我测试过的问题。

1 个答案:

答案 0 :(得分:1)

在向导上添加页面的addPage方法可用。 但是页面上的项目/小部件是什么? 因此,如果我想在页面上添加QPushButton或QLabel,则在文档中可以找到代码。 我们将使用addWidget函数创建布局并在布局上添加按钮和标签,最后在tp QWizardPage中设置该布局。 类似地,如果我使用addWidget在布局中添加一个QPushButton,一个QFrame或QWidget并在QWizardPage上设置该布局并将页面添加到QWizard,则该页面将被添加到QWizard中,并且页面上的QPushButton也可见,但是QFrame / QWidget不可见。 / p>

我通过制作QWizardPage子类解决了这个问题,并在其中创建了以QWizardPage子类为父类的QFrame。

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);
 }