【问题标题】:How to disable next button in QWizard如何在 QWizard 中禁用下一个按钮
【发布时间】: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())。

有什么想法吗?

【问题讨论】:

    标签: c++ qt qwidget


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 2020-11-24
      • 2020-08-10
      • 2013-05-10
      • 2021-10-24
      • 2013-11-15
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多