2010-08-03 85 views
8

我正在使用Qt,並使用包含多個頁面的QWizard對象。 當涉及到一個特定的頁面,我想先隱藏「下一步」按鈕,並在用戶做了一些事情後顯示它(如點擊一個單選按鈕...)哪裏可以控制QWizard按鈕?

我想要做一些定製控制當這個特定的頁面出現時嚮導的嚮導。 問題是,我知道如何隱藏按鈕,但我不知道我應該使用哪個函數。 我試過QWizardPage構造函數,initializePage函數,「show」函數,但所有這些函數都不起作用。

如果我把按鈕控件放在嚮導頁的構造函數中,程序將會崩潰,因爲嚮導對象還沒有。

如果我把它放在initializePage函數中,一些QWizard函數會在initializePage函數後重置按鈕,並且所有的自定義設置都將消失。

而顯示功能似乎不能被覆蓋。

我真的不知道哪個功能可用。 在MFC中有沒有像OnSetActive這樣的函數或者在JAVA中加載? 當頁面顯示時會調用哪一個?

回答

8

最好的解決方案可能是使用QWizardPage::registerField提供的解決方案。它允許你定義必填字段/單選按鈕等。並且嚮導中的下一個和/或完成按鈕僅在填寫/檢查所有必填字段時啓用。

有關使用此功能的示例,請參閱http://doc.trolltech.com/4.6/dialogs-licensewizard.html。編輯:QWizard::button提供訪問嚮導中的按鈕。你有沒有試過類似myWizard->button(QWizard::NextButton)->setEnabled(false)

+0

謝謝,但我的問題有點不同。 使用registerField,Next和Finish按鈕一起決定。 我想要做的是決定一個頁面是否是最終頁面,換句話說,我想確定嚮導是否應該成爲最終頁面。 我知道我可以使用setFinalPage,但是,在將頁面設置爲最終頁面後,Finish按鈕出現,這很好,但下一個按鈕仍然存在,這就是我想要避免的。我想禁用它或隱藏它。 isComplete或registerField同時控制Next和Finish按鈕,我希望它們分開。 – 2010-08-04 07:04:23

+0

@Claire Huang:給我的答案增加了一個新點子。我希望它有幫助。 – 2010-08-04 07:39:56

+0

嗨格雷格:對不起,我沒有看到您的評論,並感謝您的幫助。是的,我嘗試在initializePage函數中設置按鈕,但是,似乎該按鈕在initializePage()後已被重置。我無法找到正確的功能來設置按鈕。 – 2010-11-05 04:38:26

4

要禁用下一個按鈕,您可以繼承QWizardPage並重新實​​現isComplete()。當它返回true時,QWizard將啓用該按鈕。當您更改isComplete()的狀態時,子類必須發出'completeChanged()'信號。 QWizardPage的文檔解釋瞭如何做到這一點。

也許你也可以使用

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

隱藏按鈕。

+0

感謝您的回覆。我怎樣才能發出我的嚮導按下的捕捉信號完成按鈕。 – Tariq 2014-07-24 18:13:24