Как добавить QFrame или QWidget как QWizardPage на QWidzard

Я попытался добавить подкласс фрейма / виджета на 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);
}

Вторая страница мастера показывает только одну кнопку. Рамка не там. Подкласс фрейма не имеет проблем, которые я тестировал.

1 ответ

Решение

Для добавления страницы в мастер доступен метод addPage. Но какие будут элементы / виджеты на странице? Поэтому, если я хочу добавить QPushButton или QLabel на страницу, в документации доступен код. Мы создадим макет и добавим кнопки и метку на макет с помощью функции addWidget и, наконец, установим этот макет в QWizardPage. Точно так же, если я добавлю один QPushButton, один QFrame или QWidget в макет с помощью addWidget и установлю этот макет на 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);
 }
Другие вопросы по тегам