Не могу разобраться с QWizard и QWizardPage
Всем доброго времени суток!
Помогите разобраться с этим двумя классами. Вроде делаю все по примеру из Help, но ничего не получается, а именно кнопка перехода далее не становится активной, хотя страницы добавляются.
Выкладываю текст своего Wizard (его первый вариант):
Текст заголовочного файла индексов страниц wizard
#ifndef SHARED_DEFS_H #define SHARED_DEFS_H enum { INTRO_PAGE, PARTNUMBER_PAGE, ALTIDENT_PAGE, CONNECTOR_PAGE_1, CONNECTOR_PAGE_2, REFERNCES_PAGE, FINAL_PAGE }; #endif // SHARED_DEFS_H
- Создаю два страницы QWizardPage
#ifndef INTROPAGE_H #define INTROPAGE_H #include <QWizardPage> enum standardPart { CONNECTOR, DISTRIBUTION_PART, ACCESSORY, SOLDER_SLEEVE, SHRINK_SLEEVE, IDENTIFICATION_SLEEVE, CONDUIT, WIRE_MATERIAL }; class QRadioButton; class QLabel; class IntroPage: public QWizardPage { Q_OBJECT public: IntroPage( QWidget* parent = nullptr ); // ~IntroPage(){} int nextId() const override; void initializePage() override; private: QLabel* m_standardpart; QLabel* m_select_lbl; QRadioButton* m_connector_rbtn; QRadioButton* m_distriburionpart_rbtn; QRadioButton* m_accessoty_rbtn; QRadioButton* m_soldersleeve_rbtn; QRadioButton* m_shrinksleeve_rbtn; QRadioButton* m_identificationsleeve_rbtn; QRadioButton* m_conduit_rbtn; QRadioButton* m_wirematerial_rbtn; }; #endif // INTROPAGE_H
#include "intropage.h" #include <QRadioButton> #include <QLabel> #include <QBoxLayout> #include "shared_defs.h" IntroPage::IntroPage( QWidget* parent ) : QWizardPage( parent ) { setObjectName("introPage"); setTitle(tr("Main page")); setSubTitle(tr("Electrical standard part with the subordinated item.")); QBoxLayout* mainLayout = new QVBoxLayout; mainLayout->addWidget(m_standardpart = new QLabel); mainLayout->addWidget(m_select_lbl = new QLabel); mainLayout->addWidget(m_connector_rbtn = new QRadioButton(tr("Connector"))); mainLayout->addWidget(m_distriburionpart_rbtn = new QRadioButton(tr("Distribution part"))); mainLayout->addWidget(m_accessoty_rbtn = new QRadioButton(tr("Accessory"))); mainLayout->addWidget(m_soldersleeve_rbtn = new QRadioButton(tr("Solder sleeve"))); mainLayout->addWidget(m_shrinksleeve_rbtn = new QRadioButton(tr("Shrink sleeve"))); mainLayout->addWidget(m_identificationsleeve_rbtn = new QRadioButton(tr("Identification sleeve"))); mainLayout->addWidget(m_conduit_rbtn = new QRadioButton(tr("Conduit"))); mainLayout->addWidget(m_wirematerial_rbtn = new QRadioButton(tr("Wire material"))); mainLayout->addStretch(1); m_standardpart->setVisible(false); registerField( "typeStandardpart*", m_standardpart); m_connector_rbtn->setChecked( true ); setLayout( mainLayout ); } int IntroPage::nextId() const { return PARTNUMBER_PAGE; } void IntroPage::initializePage() { if(m_connector_rbtn->isChecked()){ m_standardpart->setNum(standardPart::CONNECTOR); }else if(m_distriburionpart_rbtn->isChecked()){ m_standardpart->setNum(standardPart::DISTRIBUTION_PART); }else if(m_accessoty_rbtn->isChecked()){ m_standardpart->setNum(standardPart::ACCESSORY); }else if(m_soldersleeve_rbtn->isChecked()){ m_standardpart->setNum(standardPart::SOLDER_SLEEVE); }else if(m_shrinksleeve_rbtn->isChecked()){ m_standardpart->setNum(standardPart::SHRINK_SLEEVE); }else if(m_identificationsleeve_rbtn->isChecked()){ m_standardpart->setNum(standardPart::IDENTIFICATION_SLEEVE); }else if(m_conduit_rbtn->isChecked()){ m_standardpart->setNum(standardPart::CONDUIT); }else if(m_wirematerial_rbtn->isChecked()){ m_standardpart->setNum(standardPart::WIRE_MATERIAL); } }
#ifndef PARTNUMBERPAGE_H #define PARTNUMBERPAGE_H #include <QWizardPage> class QLabel; class PartNumberPage : public QWizardPage { Q_OBJECT public: PartNumberPage(QWidget* parent = nullptr); // ~PartNumberPage(){} private: QLabel* m_test; // QWizardPage interface public: int nextId() const override; }; #endif // PARTNUMBERPAGE_H
#include "partnumberpage.h" #include <QLabel> #include <QBoxLayout> #include "shared_defs.h" PartNumberPage::PartNumberPage(QWidget* parent) : QWizardPage( parent ) { setObjectName("partNumberPage"); setTitle(tr("Part number")); setSubTitle(tr("Electrical standard part with the subordinated item.")); QBoxLayout* mainLayout = new QVBoxLayout; mainLayout->addWidget(m_test = new QLabel); } int PartNumberPage::nextId() const { return ALTIDENT_PAGE; }
- Код самого Wizard
#ifndef WIZARDSTANDARDPART_H #define WIZARDSTANDARDPART_H #include <QWizard> #include "intropage.h" #include "partnumberpage.h" #include "shared_defs.h" namespace Ui { class WizardStandardPart; } class WizardStandardPart : public QWizard { Q_OBJECT public: explicit WizardStandardPart(QWidget *parent = nullptr); ~WizardStandardPart(); private: Ui::WizardStandardPart *ui; }; #endif // WIZARDSTANDARDPART_H
#include "wizardstandardpart.h" #include "ui_wizardstandardpart.h" #include "shared_defs.h" WizardStandardPart::WizardStandardPart(QWidget *parent) : QWizard(parent), ui(new Ui::WizardStandardPart) { setWindowTitle(tr("License Wizard")); ui->setupUi(this); setPage(INTRO_PAGE, new IntroPage(this)); setPage(PARTNUMBER_PAGE, new PartNumberPage(this)); setStartId(INTRO_PAGE); } WizardStandardPart::~WizardStandardPart() { delete ui; }
- Как вызываю Wizard (mainwindow.cpp):
... void MainWindow::actionCreateStandardPartObject() { WizardStandardPart *wizardStandardPart = new WizardStandardPart(); qDebug() << wizardStandardPart->page(INTRO_PAGE)->title(); qDebug() << wizardStandardPart->page(PARTNUMBER_PAGE)->title(); wizardStandardPart->exec(); } ...
Вот что выводится при запуске wizard:
Но количество страниц в Wizard точно две, потому что я могу получить их свойсва title.
Всем спасибо за помощь заранее.
Делаю так первый раз, может быть что-то упускаю.
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Добрый день
А там нет ещё какого-нибудь кода с кнопками. Мне кажется, что там что-то должно быть, чтобы делать кнопку активной.
Но я в упор не вижу у вас подобного кода.
Евгений, добрый день.
Я просмотрел кучу примеров и ничего подобного не нашел.
Кнопки нигде не описываются. Для меня это тоже показалось странным. Я подумал, что это отдается на откуп самому wizard.
Ну вообще у меня есть ещё такая мысль, что необходимо вызывать соответсвующие методы родительского класса страницы