在哪里控制QWizard按钮?

10
我正在使用Qt,并且使用一个包含多个页面的QWizard对象。当进入特定页面时,我想先隐藏“下一步”按钮,然后在用户执行某些操作(例如单击单选按钮)后显示它。
当这个特定页面出现时,我想对向导进行一些自定义控制。 问题是,我知道如何隐藏按钮,但不知道应该使用哪个函数。 我尝试了QWizardPage构造函数、initializePage函数和“show”函数,但所有这些函数都没有起作用。
如果我把按钮控件放在向导页面构造函数中,程序将崩溃,因为向导对象还不存在。
如果我把它放在initializePage函数中,一些QWizard函数会在initializePage函数之后重置按钮,并且所有自定义设置都将消失。
而show函数似乎无法被覆盖。
我真的无法想出哪个函数是可用的。 是否有像MFC中OnSetActive或JAVA中Load这样的函数? 哪个函数将在显示页面之前调用?
2个回答

9
最佳解决方案可能是使用QWizardPage::registerField提供的方法。它允许您定义强制填写字段/单选按钮等,只有在所有强制填写字段都填写/选中时,您向导中的下一步和/或完成按钮才可用。

请参见http://doc.trolltech.com/4.6/dialogs-licensewizard.html以获取使用此功能的示例。
编辑:QWizard::button提供了对向导中按钮的访问。您尝试过类似myWizard->button(QWizard::NextButton)->setEnabled(false)这样的方法吗?

谢谢,但我的问题有些不同。 使用registerField,下一步和完成按钮是一起决定的。 我想做的是决定页面是否为最终页面,换句话说,我想决定向导是否应该提前结束。我知道可以使用setFinalPage,但是将页面设置为最终页面后,完成按钮会出现,这很好,但下一步按钮仍然存在,这就是我想避免的。我想禁用或隐藏它。isComplete或registerField控制下一步和完成按钮,我希望它们分开控制。 - Claire Huang
@Claire Huang:在我的答案中添加了一个新的想法,希望能有所帮助。 - Greg S
嗨Greg:很抱歉我没有看到你的评论,谢谢你的帮助。是的,我确实尝试在initializePage函数中设置按钮,但是似乎按钮在initializePage()之后被重置了。我找不到正确的函数来设置按钮。 - Claire Huang

5
为了禁用下一步按钮,您可以子类化 QWizardPage 并重新实现 isComplete()。当它返回 true 时,QWizard 将启用该按钮。子类必须在更改 isComplete() 的状态时发出“completeChanged()”信号。 QWizardPage 的文档解释了如何做到这一点。
可能您也可以使用 parent->button(QWizard::NextButton)->setVisible(false) 来隐藏该按钮。

谢谢你的回复。我如何从我的向导中发出捕获信号完成按钮被按下的信号? - Tariq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接