Где управлять кнопкой QWizard? - PullRequest
9 голосов
/ 04 августа 2010

Я использую Qt, и я использую объект QWizard, который содержит несколько страниц. когда дело доходит до определенной страницы, я хочу сначала спрятать кнопку «Далее» и показать ее после того, как пользователь что-то сделает (например, щелкнув по радиокнопке ...)

Я хочу сделать некоторые настройки для мастера, когда появится эта конкретная страница. вопрос в том, я знаю, как скрыть кнопку, но я не знаю, какую функцию мне следует использовать. Я пробовал конструктор QWizardPage, функцию initializePage, функцию "show", но все эти функции не работали.

Если поместить элемент управления кнопками в конструктор страниц мастера, программа завершится сбоем, так как объект мастера еще не существует.

Если я добавлю это в функцию initializePage, некоторые функции QWizard сбросят кнопки после функции initializePage, и все пользовательские настройки исчезнут.

И функция показа не может быть перезаписана.

Я действительно не могу понять, какую функцию можно использовать. Есть ли такая функция, как OnSetActive в MFC или Load в JAVA ?? Который будет вызван, когда появится страница?

Ответы [ 2 ]

9 голосов
/ 04 августа 2010

Лучшим решением, вероятно, является использование QWizardPage::registerField. Позволяет определить обязательные поля / переключатели / и т. Д. а кнопки «Далее» и / или «Готово» в мастере доступны только в том случае, если все обязательные поля заполнены / отмечены.

См. http://doc.trolltech.com/4.6/dialogs-licensewizard.html для примера использования этой функции.

РЕДАКТИРОВАТЬ: QWizard::button обеспечивает доступ к кнопкам в мастере. Вы пробовали что-то вроде myWizard->button(QWizard::NextButton)->setEnabled(false)?

4 голосов
/ 23 ноября 2010

Чтобы отключить следующую кнопку, вы можете создать подкласс QWizardPage и переопределить isComplete().Когда он вернет true, тогда QWizard активирует кнопку.Подкласс должен испускать сигнал completeChanged () при изменении состояния isComplete().Документация для QWizardPage объясняет, как это сделать.

Возможно, вы также можете использовать

parent->button(QWizard::NextButton)->setVisible(false)

, чтобы скрыть кнопку.

...