2010-08-03 2 views
8

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

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

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

Если я положил его в функцию initializePage, некоторые функции QWizard сбросят кнопки после функции initializePage, и все настроенные параметры исчезнут.

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

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

ответ

8

Лучшее решение, вероятно, обеспечивается с помощью QWizardPage::registerField. Он позволяет вам определять обязательные поля/переключатели/и т. Д. и кнопки Next и/или Finish в вашем мастере включаются только при заполнении/проверке всех обязательных полей.

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

EDIT: QWizard::button обеспечивает доступ к кнопкам мастера. Вы пробовали что-то вроде myWizard->button(QWizard::NextButton)->setEnabled(false)?

+0

Спасибо, но мой вопрос немного другой. С помощью registerField кнопки «Далее» и «Готово» решаются вместе. Что я хочу сделать, так это решить, является ли страница окончательной страницей или нет, другими словами, я хочу решить, должен ли волшебник в конечном итоге уйти с наушников. Я знаю, что могу использовать setFinalPage, однако, после установки страницы на финальную страницу, появляется кнопка Finish, это хорошо, но следующая кнопка все еще существует, этого я и хочу избежать. Я хочу отключить его или скрыть. isComplete или registerField управляют кнопками Next и Finish вместе, и я хочу, чтобы они были разделены. –

+0

@Claire Huang: Добавлена ​​новая идея для моего ответа; Я надеюсь, что это помогает. –

+0

Привет, Грег: Извините, что я не видел вашего комментария и благодарности за вашу помощь. Да, я пытаюсь установить кнопку в функции initializePage, однако кажется, что кнопка была сброшена после initializePage(). Я не могу найти правильную функцию для установки кнопок. –

4

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

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

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

скрыть кнопку.

+0

Спасибо за ваш ответ. Как я могу испустить кнопку завершения сигнала catch, нажатую из моего мастера. – Tariq

Смежные вопросы