我正在尝试做的事情
我正在尝试创建一个看起来有点像这样的 QWizardPage 的子类,但有一些细微的调整。当计数器变量大于 0 时,我想禁用下一个按钮。(由于某些功能需要它去 x..x-1...0,它不能从一开始就为 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()
(是的,每当我设置计数器时,我都会发出 a )。
有任何想法吗?