Intruder
Intruder19 апреля 2020 г. 15:36

Не могу разобраться с QWizard и QWizardPage

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

  1. Создаю два страницы 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;
}

  1. Код самого 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;
}
  1. Как вызываю 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
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

3
Evgenii Legotckoi
  • 20 апреля 2020 г. 3:06

Добрый день

А там нет ещё какого-нибудь кода с кнопками. Мне кажется, что там что-то должно быть, чтобы делать кнопку активной.
Но я в упор не вижу у вас подобного кода.

    Intruder
    • 20 апреля 2020 г. 3:15

    Евгений, добрый день.
    Я просмотрел кучу примеров и ничего подобного не нашел.
    Кнопки нигде не описываются. Для меня это тоже показалось странным. Я подумал, что это отдается на откуп самому wizard.

      Evgenii Legotckoi
      • 20 апреля 2020 г. 3:20

      Ну вообще у меня есть ещё такая мысль, что необходимо вызывать соответсвующие методы родительского класса страницы

      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);
          }
      
          QWizardPage::initializePage();
      }
      

        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь
        AD

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:50баллов,
        • Очки рейтинга-4
        m
        • molni99
        • 26 октября 2024 г. 1:37

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:80баллов,
        • Очки рейтинга4
        m
        • molni99
        • 26 октября 2024 г. 1:29

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:20баллов,
        • Очки рейтинга-10
        Последние комментарии
        i
        innorwall11 ноября 2024 г. 22:12
        Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
        i
        innorwall11 ноября 2024 г. 18:23
        QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
        i
        innorwall11 ноября 2024 г. 15:50
        Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
        i
        innorwall11 ноября 2024 г. 14:19
        Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
        i
        innorwall11 ноября 2024 г. 13:55
        PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
        Сейчас обсуждают на форуме
        i
        innorwall11 ноября 2024 г. 20:56
        добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
        i
        innorwall11 ноября 2024 г. 10:55
        Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
        9
        9Anonim25 октября 2024 г. 9:10
        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
        ИМ
        Игорь Максимов3 октября 2024 г. 4:05
        Реализация навигации по разделам Спасибо Евгений!

        Следите за нами в социальных сетях