2010-08-03 12 views
8

Sto usando Qt e utilizzo un oggetto QWizard che contiene diverse pagine. quando si tratta di una pagina specifica, voglio prima nascondere il pulsante "Avanti" e mostrarlo dopo che l'utente fa qualcosa (come fare clic su un radiobutton ...)Dove controllare il pulsante QWizard?

Voglio fare qualche controllo personalizzato della procedura guidata quando viene visualizzata questa pagina specifica. la domanda è, so come nascondere il pulsante, ma non so quale funzione dovrei usare. Ho provato il costruttore QWizardPage, la funzione initializePage, la funzione "show", ma tutte queste funzioni non hanno funzionato.

Se inserisco il controllo pulsante nel costruttore della pagina della procedura guidata, il programma si arresta in modo anomalo poiché l'oggetto della procedura guidata non è ancora lì.

Se inserisco la funzione initializePage, alcune funzioni di QWizard reimposteranno i pulsanti dopo la funzione initializePage e tutte le impostazioni personalizzate saranno esaurite.

E la funzione di visualizzazione sembra non può essere sovrascritta.

Non riesco davvero a capire quale funzione sia utilizzabile. Esiste qualche funzione come OnSetActive in MFC o Load in JAVA ?? Quale sarà chiamato quando una pagina sta per mostrarsi?

risposta

8

La soluzione migliore è probabilmente quella fornita utilizzando . Permette di definire campi obbligatori/pulsanti di opzione/ecc. e i pulsanti Avanti e/o Fine nella procedura guidata sono abilitati solo quando tutti i campi obbligatori sono compilati/controllati.

Vedere http://doc.trolltech.com/4.6/dialogs-licensewizard.html per un esempio che utilizza questa funzionalità.

MODIFICA: QWizard::button fornisce l'accesso ai pulsanti nella procedura guidata. Hai provato qualcosa come myWizard->button(QWizard::NextButton)->setEnabled(false)?

+0

Grazie, ma la mia domanda è leggermente diversa. Usando registerField, i pulsanti Next e Finish vengono decisi insieme. Quello che voglio fare è decidere se una pagina è o meno la pagina finale, in altre parole, voglio decidere se la procedura guidata debba finire nel caso in cui il depolveratore dovesse finire. So che posso usare setFinalPage, tuttavia, dopo aver impostato una pagina per la pagina finale, il pulsante Finish appare, va bene, ma il pulsante successivo è ancora lì, questo è quello che voglio evitare. Voglio disabilitarlo o nasconderlo. isComplete o registerField controlla insieme i pulsanti Next e Finish e voglio che siano separati. –

+0

@Claire Huang: aggiunta una nuova idea alla mia risposta; Spero possa essere d'aiuto. –

+0

Ciao Greg: Mi dispiace di non aver visto il tuo commento e grazie per il tuo aiuto. Sì, provo a impostare il pulsante nella funzione initializePage, tuttavia, sembra che il pulsante sia stato ripristinato dopo initializePage(). Non riesco a trovare la funzione corretta per impostare i pulsanti. –

4

Per disattivare il pulsante successivo è possibile creare sottoclasse QWizardPage e reimplementare isComplete(). Quando restituisce true allora QWizard abiliterà il pulsante. La sottoclasse deve emettere il segnale "completeChanged()" quando si modifica lo stato di isComplete(). La documentazione per QWizardPage spiega come farlo.

Forse si potrebbe anche usare

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

per nascondere il pulsante.

+0

Grazie per la risposta. Come posso emettere il pulsante di chiusura del segnale di cattura premuto dal mio assistente. – Tariq

Problemi correlati