Intruder
IntruderСәуір 19, 2020, 3: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
        Соңғы пікірлер
        ИМ
        Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
        Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
        Evgenii Legotckoi
        Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
        A
        ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
        Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
        ИМ
        Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
        d
        dblas5Шілде 5, 2024, 11:02 Т.Ж.
        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
        Енді форумда талқылаңыз
        m
        moogoҚар. 22, 2024, 7:17 Т.Ж.
        Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
        Evgenii Legotckoi
        Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
        t
        tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
        google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
        NSProject
        NSProjectМаусым 4, 2022, 3:49 Т.Ж.
        Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

        Бізді әлеуметтік желілерде бақылаңыз