如何在QWizard中完全禁用或隐藏后退按钮?

5
我想禁用或隐藏QWizard对话框中的“返回”按钮,我该怎么做?
3个回答

6

我查看了Qt的源代码,发现可以通过创建自定义按钮布局并在列表中省略“返回”按钮来隐藏“返回”按钮:

  QList<QWizard::WizardButton> button_layout;
  button_layout << QWizard::HelpButton << QWizard::Stretch <<
                   QWizard::NextButton << QWizard::CustomButton1 <<
                   QWizard::CancelButton;
  this->setButtonLayout(button_layout);

我希望这能节省某人的时间。
附言:
据我所知,为避免使用QTimer,需要修改QWizard源代码。最简单的方法是添加一个虚函数 virtual void buttonsUpdated(); 并在QWizard的结尾处调用它: void QWizardPrivate::_q_updateButtonStates() 然后在你的QWizard子类中重新实现这个buttonsUpdated()函数并在那里禁用返回按钮。

您可以随时使用QWizard::BackButtonQWizard::button(WizardButton which) const来隐藏/禁用它。 - Kamil Klimek
4
你自己有没有检查过?我在4.7.4版本上进行了测试,结果并没有那么简单。 - Dmitriy

5

调用

QWizard::button(QWizard::BackButton).hide()

QWizard::onCurrentIdChanged(int)

这在PyQt4中对我很有用。

这实际上会在每个向导页面上再次隐藏“后退”按钮,但它实现了期望的效果。


pyside2:对我来说,当completeChanged被发射时,按钮会重新出现。甚至无法将hide连接到completeChanged。我发现的唯一解决方案是在每次发射completeChanged后手动调用hide,这真的很烦人。 - johnson

5

另一种(可能更加框架化)的方法是将QWizardPage设置为提交页面,该页面位于要禁用返回按钮的页面之前。只需在QWizardPage上调用this.setCommitPage(true),下一页就不会启用其后退按钮。

来自QWizardPage文档

void QWizardPage :: setCommitPage(bool commitPage)如果commitPage为true,则将此页面设置为提交页面;否则,将其设置为普通页面。提交页面是表示无法通过单击“后退”或“取消”来撤销的操作的页面。提交页面上的“下一步”按钮将被“提交”按钮替换。单击此按钮只是调用QWizard :: next(),就像单击下一步一样。 直接从提交页面进入的页面其后退按钮将被禁用。参见isCommitPage()。

如果您希望禁用所有返回按钮,可以在每个页面上都调用它。


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