在哪里控制QWizard按钮?

时间:2010-08-03 23:23:15

标签: qt qt4 wizard qt4.6

我正在使用Qt,并且我使用包含多个页面的QWizard对象。 当涉及到特定页面时,我想首先隐藏“下一步”按钮,并在用户执行某些操作后显示它(例如单击一个单选按钮...)

我希望在显示此特定页面时对向导进行一些自定义控制。 问题是,我知道如何隐藏按钮,但我不知道应该使用哪个功能。 我尝试了QWizardPage构造函数,initializePage函数,“show”函数,但所有这些函数都不起作用。

如果我将按钮控件放在向导页面构造函数中,程序将崩溃,因为向导对象还没有。

如果我把它放在initializePage函数中,一些QWizard函数会在initializePage函数之后重置按钮,并且所有自定义设置都将消失。

show函数似乎无法覆盖。

我真的无法弄清楚哪个功能可用。 是否在MFC中使用OnSetActive或在JAVA中加载? 当页面显示出来时会调用哪个?

2 个答案:

答案 0 :(得分:9)

最佳解决方案可能是使用QWizardPage::registerField提供的解决方案。它允许您定义必填字段/单选按钮/等。只有在填写/检查所有必填字段时,才会启用向导中的“下一步”和/“完成”按钮。

有关使用此功能的示例,请参阅http://doc.trolltech.com/4.6/dialogs-licensewizard.html

编辑:QWizard::button提供对向导中按钮的访问权限。你尝试过myWizard->button(QWizard::NextButton)->setEnabled(false)吗?

答案 1 :(得分:4)

要禁用下一个按钮,您可以继承QWizardPage并重新实现isComplete()。当它返回true时,QWizard将启用该按钮。当您更改isComplete()的状态时,子类必须发出'completeChanged()'信号。 QWizardPage的文档说明了如何执行此操作。

可能你也可以使用

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

隐藏按钮。