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

时间:2013-07-17 08:08:00

标签: c++ qt qwidget

我正在尝试做什么

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

我尝试了什么

重新实现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()

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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