2010-08-03 16 views
8

Estoy usando Qt, y uso un objeto QWizard que contiene varias páginas. cuando se trata de una página específica, quiero ocultar el botón "Siguiente" primero, y lo muestra después de que el usuario haga algo (como hacer clic en un botón de radio ...)¿Dónde controlar el botón QWizard?

Quiero personalizar el control del asistente cuando aparece esta página específica. la pregunta es, sé cómo ocultar el botón, pero no sé qué función debo usar. Probé el constructor QWizardPage, la función initializePage, la función "mostrar", pero todas estas funciones no funcionaron.

Si pongo el control del botón en el constructor de la página del asistente, el programa se bloqueará debido a que el objeto del asistente todavía no está allí.

Si lo pongo en la función initializePage, alguna función de QWizard reiniciará los botones después de la función initializePage, y todas las configuraciones personalizadas desaparecerán.

Y parece que la función de mostrar no se puede sobrescribir.

Realmente no puedo entender qué función es utilizable. ¿Hay alguna función como OnSetActive en MFC o Cargar en JAVA? ¿A qué se llamará cuando se muestre una página?

Respuesta

8

La mejor solución es probablemente la que proporciona el uso de QWizardPage::registerField. Le permite definir campos obligatorios/botones de radio/etc. y los botones Siguiente y/o Finalizar en su asistente están habilitados solo cuando se completan/verifican todos los campos obligatorios.

Consulte http://doc.trolltech.com/4.6/dialogs-licensewizard.html para obtener un ejemplo que hace uso de esta funcionalidad.

EDITAR: QWizard::button proporciona acceso a los botones en el asistente. ¿Has probado algo como myWizard->button(QWizard::NextButton)->setEnabled(false)?

+0

Gracias, pero mi pregunta es un poco diferente. Usando registerField, los botones Next y Finish se deciden juntos. Lo que quiero hacer es decidir si una página es la página final o no, en otras palabras, quiero decidir si el asistente debe terminar como eariler. Sé que puedo usar setFinalPage, sin embargo, después de configurar una página en la página final, aparece el botón Finalizar, eso está bien, pero el siguiente botón sigue ahí, eso es lo que quiero evitar. Quiero desactivarlo u ocultarlo. isComplete o registerField controlan los botones Siguiente y Terminar juntos, y quiero que se separen. –

+0

@ Claire Huang: Agregué una nueva idea a mi respuesta; Espero que ayude. –

+0

Hola Greg: Perdón por no haber visto tu comentario y gracias por tu ayuda. Sí, intento configurar el botón en la función initializePage, sin embargo, parece que el botón se ha restablecido después de initializePage(). No puedo encontrar la función correcta para configurar los botones. –

4

Para deshabilitar el siguiente botón, puede crear la subclase QWizardPage y volver a aplicar isComplete(). Cuando devuelve verdadero, entonces QWizard habilitará el botón. La subclase debe emitir la señal 'completeChanged()' cuando cambie el estado de isComplete(). La documentación para QWizardPage explica cómo hacerlo.

Posiblemente también se podría utilizar

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

para ocultar el botón.

+0

Gracias por su respuesta. ¿Cómo puedo emitir un botón para finalizar la señal de captura presionado desde mi asistente? – Tariq

Cuestiones relacionadas