gpt4 book ai didi

c++ - 如何禁用 QWizard 中的下一步按钮

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:47 30 4
gpt4 key购买 nike

我想做什么

我正在尝试创建一个 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())。

有什么想法吗?

最佳答案

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

关于c++ - 如何禁用 QWizard 中的下一步按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17694437/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com