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 р. 03:06

Добрый день

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

    Intruder
    • 20 квітня 2020 р. 03:15

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

      Evgenii Legotckoi
      • 20 квітня 2020 р. 03: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();
      }
      

        Коментарі

        Only authorized users can post comments.
        Please, Log in or Sign up
        sf

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

        • Результат:90бали,
        • Рейтинг балів8
        МВ

        Qt - Тест 001. Сигналы и слоты

        • Результат:68бали,
        • Рейтинг балів-1
        ЛС

        C++ - Тест 001. Первая программа и типы данных

        • Результат:53бали,
        • Рейтинг балів-4
        Останні коментарі
        A
        ALO1ZE19 жовтня 2024 р. 08:19
        Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
        ИМ
        Игорь Максимов05 жовтня 2024 р. 07:51
        Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
        d
        dblas505 липня 2024 р. 11:02
        QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
        k
        kmssr08 лютого 2024 р. 18:43
        Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
        АК
        Анатолий Кононенко05 лютого 2024 р. 01:50
        Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
        Тепер обговоріть на форумі
        J
        JacobFib17 жовтня 2024 р. 03:27
        добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
        ИМ
        Игорь Максимов03 жовтня 2024 р. 04:05
        Реализация навигации по разделам Спасибо Евгений!
        JW
        Jhon Wick01 жовтня 2024 р. 15:52
        Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
        КГ
        Кирилл Гусарев27 вересня 2024 р. 09:09
        Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
        F
        Fynjy22 липня 2024 р. 04:15
        при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

        Слідкуйте за нами в соціальних мережах