【发布时间】:2013-07-18 17:39:11
【问题描述】:
我要做什么
我正在尝试创建一个 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())。
有什么想法吗?
【问题讨论】: