-1

我尝试在子类上添加框架/小部件子QWizard类,但向导页面为空白。我添加了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);
}

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

4

1 回答 1

2

要在向导上添加页面 addPage 方法可用。但是页面上的项目/小部件是什么?因此,如果我想在页面上添加 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);
 }
于 2018-07-30T13:58:51.287 回答