我正在尝试做什么
我正在尝试创建一个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()
。
有什么想法吗?
答案 0 :(得分:2)
QWizard根据QWizardPage :: isComplete()自动管理Next按钮的状态,你不应该在initializePage()中自己实现这个功能。你的isComplete()没有被调用的原因是它实际上并没有从QWizardPage覆盖QWizardPage :: isComplete const 。声明你的函数 const ,它将正确覆盖原始函数。