2010-08-03 14 views
8

Ich verwende Qt, und ich verwende ein QWizard-Objekt, das mehrere Seiten enthält. Wenn es um eine bestimmte Seite geht, möchte ich die "Weiter" -Schaltfläche zuerst ausblenden, und zeigt es nach dem Benutzer etwas (z. B. das Klicken auf eine Radiobutton ...)Wo kann ich die QWizard-Taste steuern?

Ich möchte einige anpassen Steuerung des Assistenten, wenn diese bestimmte Seite angezeigt wird. ist die Frage, ich weiß, wie man den Knopf versteckt, aber ich weiß nicht, welche Funktion ich verwenden sollte. Ich habe versucht, den QWizardPage-Konstruktor, die InitializePage-Funktion, die "Show" -Funktion, aber alle diese Funktion hat nicht funktioniert.

Wenn ich das Button-Steuerelement in den Assistenten Seite Konstruktor setzen, wird das Programm abstürzen, da das Wizard-Objekt noch nicht da ist.

Wenn ich es in die Funktion initializePage einfüge, werden einige QWizard-Funktionen die Schaltflächen nach der initializePage-Funktion zurücksetzen, und alle benutzerdefinierten Einstellungen sind weg.

Und die Show-Funktion scheint kann nicht überschrieben werden.

Ich kann wirklich nicht herausfinden, welche Funktion verwendbar ist. Gibt es eine Funktion wie OnSetActive in MFC oder Load in JAVA? Welches wird aufgerufen, wenn eine Seite angezeigt wird?

Antwort

8

Die beste Lösung ist wahrscheinlich die mit QWizardPage::registerField. Hier können Sie Pflichtfelder/Optionsfelder/etc definieren. und die Schaltflächen Weiter und/oder Fertigstellen in Ihrem Assistenten sind nur aktiviert, wenn alle Pflichtfelder ausgefüllt/markiert sind.

Ein Beispiel, das diese Funktionalität nutzt, finden Sie unter http://doc.trolltech.com/4.6/dialogs-licensewizard.html.

EDIT: QWizard::button bietet Zugriff auf die Schaltflächen im Assistenten. Haben Sie etwas wie myWizard->button(QWizard::NextButton)->setEnabled(false) versucht?

+0

Danke, aber meine Frage ist ein bisschen anders. Mit registerField werden die Schaltflächen Next und Finish gemeinsam festgelegt. Was ich tun möchte, ist zu entscheiden, ob eine Seite letzte Seite ist oder nicht, mit anderen Worten, ich möchte entscheiden, ob der Assistent am Ende sein sollte. Ich weiß, dass ich die setFinalPage verwenden kann, aber nach dem Einstellen einer Seite auf die letzte Seite erscheint die Schaltfläche "Finish", das ist gut, aber die nächste Schaltfläche ist immer noch da, das möchte ich vermeiden. Ich möchte es deaktivieren oder ausblenden. isComplete oder registerField steuern die Schaltflächen Next und Finish zusammen, und ich möchte, dass sie getrennt werden. –

+0

@Claire Huang: Eine neue Idee zu meiner Antwort hinzugefügt; Ich hoffe, es hilft. –

+0

Hallo Greg: Tut mir leid, dass ich deinen Kommentar nicht gesehen habe und danke für deine Hilfe. Ja, ich versuche, die Schaltfläche in der Funktion "initializePage" zu setzen, es scheint jedoch, dass die Schaltfläche nach der initializePage() zurückgesetzt wurde. Ich kann die richtige Funktion zum Einstellen der Tasten nicht finden. –

4

Um die nächste Schaltfläche zu deaktivieren, können Sie QWizardPage untergliedern und isComplete() neu implementieren. Wenn es wahr zurückgibt, aktiviert QWizard die Schaltfläche. Die Unterklasse muss das Signal 'completeChanged()' ausgeben, wenn Sie den Status isComplete() ändern. Die Dokumentation für QWizardPage erklärt, wie es geht.

Möglicherweise könnten Sie auch

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

verwenden Sie die Schaltfläche verbergen.

+0

Danke für Ihre Antwort. Wie kann ich die Catch-Signal-Finish-Taste von meinem Assistenten drücken? – Tariq

Verwandte Themen