如何禁用QWizard中的下一个按钮

How to disable next button in QWizard

本文关键字:下一个 按钮 何禁用 QWizard      更新时间:2023-10-16

我要做的事情

我正在尝试创建QWizardPage的一个子类,它看起来有点像这样,但有一个小的调整。当计数器变量大于0时,我想禁用下一个按钮。(从一开始就不能是0,因为有些功能需要它去x.x.x-1…0)。

我尝试过的

在构造函数中重新实现isComplete()并发出completeChanged()

bool DemoWizardPage::isComplete()
{
  return ! (counter > 0); //Also tried just return false;
}

重新启用initializePage并从此处禁用下一个按钮

void DemoWizardPage::initializePage()
{
  qDebug() << "QWizardPage:: initialize page";
  if (!this->isComplete())
  {
    qDebug() << "try to turn off next button";
    wizard()->button(QWizard::NextButton)->setDisabled(true);
    qDebug() << "next button enabled? "
             << wizard()->button(QWizard::NextButton)->isEnabled();
  }
}

迄今为止的结果

从代码中我可以看到,当页面加载时,下一个按钮被禁用。但是,由于QWizardPrivate(取自qwizard.cpp)中的这两行,它再次被启用

 bool complete = page && page->isComplete();
 btn.next->setEnabled(canContinue && complete);

我很困惑为什么isComplete()在这里返回true。我的意思是,我一开始就把计数器设置为2,而且我从不减少它。(是的,每当我设置计数器时,我都会发出completeChanged())。

有什么想法吗?

QWizard基于QWizardPage::isComplete()自动管理Next按钮的状态,您不应该在initializePage()中自己实现该功能。没有调用isComplete()的原因是它实际上并没有覆盖QWizardPage中的QWizardPage::isCompleteconst。声明您的函数const,它将正确地覆盖原始函数。