Ruslan Polupan
Ruslan Polupan24 октября 2018 г. 7:28

QWizardPage, Послать сигнал главному окну.

QWizard, QWizardPage, signal, QMainWindow

В главном окне создаю объект QWizard

    recWiz = new RecoveryWizard();
    connect(recWiz, &RecoveryWizard::signalHideWiz,this,&MainWindow::slotHideWiz);
    ui->verticalLayout->addWidget(recWiz);
    recWiz->show();

В конструкторе класса QWizard добавляю страницы:

RecoveryWizard::RecoveryWizard(QWidget *parent) :
    QWizard(parent),
    ui(new Ui::RecoveryWizard)
{
    ui->setupUi(this);

    this->setPage(CONNECTIONS_PAGE, new ConnectionsPage());
    this->setPage(TERMINALS_PAGE, new TerminalsPage());

    disconnect( button( QWizard::CancelButton ), &QAbstractButton::clicked, this, &QDialog::reject );
    connect(button(QWizard::CancelButton),&QAbstractButton::clicked,this,&RecoveryWizard::cancelWizard);
}

Со страницы TERMINALS_PAGE нужно передать значение в MainWidow (там TableWidget cо сводной информацией полученной при работе мастера).

Никак не могу сообразить как связать сигалам/слотом страницу QWizardPage и главное окно.




Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

3
Evgenii Legotckoi
  • 24 октября 2018 г. 7:39

В классе TerminalsPage я бы сделал метод, который выдаёт ваши значения, например

TerminalsPage::getMyData();

Уж не знаю какой у вас там тип данных, но думаю, что вы сами разберётесь с этим, тут главное идея.

Дальше выделял бы переменную под TerminalsPage в визарде.

m_terminalsPage = new TerminalsPage();
this->setPage(TERMINALS_PAGE, m_terminalsPage);

Далее, в обработчике завершения визарда, полагаю, что там есть  кнопка финиш или ОК, посылал бы сигнал с теми данными.

void RecoveryWizard::onOkButtonClicked()
{
    emit sendData(m_terminalsPage.getMyData());
}

А в главном окне добавил бы сигнал слотовое соединение для обработки полученных данных

connect(recWiz, &RecoveryWizard::sendData,this,&MainWindow::handleData);


    Ruslan Polupan
    • 24 октября 2018 г. 8:14

    Идею понял. Спасибо. Просто думал есть возможность сразу до главного окна достучатся.

      Evgenii Legotckoi
      • 24 октября 2018 г. 8:22
      • (ред.)

      Ну как бы через создание страниц вне визарда и передачу указателей на эти страницы в визард можно более близко расположить возможность доступа к страницам из главного окна... Вот только архитектурно, по моему мнению, это будет направильно. Страницы - это часть визарда, а не главного окна. Главное окно вообще ничего не должно знать о страницах, оно должно только получить результат, не более.

        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь
        e
        • ehot
        • 1 апреля 2024 г. 0:29

        C++ - Тест 003. Условия и циклы

        • Результат:78баллов,
        • Очки рейтинга2
        B

        C++ - Тест 002. Константы

        • Результат:16баллов,
        • Очки рейтинга-10
        B

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

        • Результат:46баллов,
        • Очки рейтинга-6
        Последние комментарии
        k
        kmssr9 февраля 2024 г. 5:43
        Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
        АК
        Анатолий Кононенко5 февраля 2024 г. 12:50
        Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
        EVA
        EVA25 декабря 2023 г. 21:30
        Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
        J
        JonnyJo25 декабря 2023 г. 19:38
        Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
        G
        Gvozdik19 декабря 2023 г. 8:01
        Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
        Сейчас обсуждают на форуме
        a
        a_vlasov14 апреля 2024 г. 16:41
        Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
        Павел Дорофеев
        Павел Дорофеев14 апреля 2024 г. 12:35
        QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
        f
        fastrex4 апреля 2024 г. 14:47
        Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
        P
        Pisych27 февраля 2023 г. 15:04
        Как получить в массив значения из связанной модели? Спасибо, разобрался:))
        AC
        Alexandru Codreanu19 января 2024 г. 22:57
        QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…

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