Как добавить 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);
}