Не могу разобраться с 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.
Всем спасибо за помощь заранее.
Делаю так первый раз, может быть что-то упускаю.
2
252
Do you like it? Share on social networks!
- Last comments
- AKApril 1, 2025, 11:41 a.m.Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Now discuss on the forum
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Добрый день
А там нет ещё какого-нибудь кода с кнопками. Мне кажется, что там что-то должно быть, чтобы делать кнопку активной.
Но я в упор не вижу у вас подобного кода.
Евгений, добрый день.
Я просмотрел кучу примеров и ничего подобного не нашел.
Кнопки нигде не описываются. Для меня это тоже показалось странным. Я подумал, что это отдается на откуп самому wizard.
Ну вообще у меня есть ещё такая мысль, что необходимо вызывать соответсвующие методы родительского класса страницы