首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWizardPage:如何重新禁用“下一步”按钮

QWizardPage:如何重新禁用“下一步”按钮
EN

Stack Overflow用户
提问于 2017-10-17 20:59:31
回答 1查看 1.3K关注 0票数 2

我有一个QWizardPage,用户应该通过某些步骤,在其中的末尾有一个按钮“测试”。如果用户按下该按钮,就会发生两件事:

  1. " next“按钮被启用,以便转到QWizard的下一页。这是通过发出按钮的特殊信号来实现的,该信号连接到QWizardPagethis->registerField("test*", m_button, "text", SIGNAL(testDone()));

m_button是从带有自定义信号testDone()QPushButton派生的。

  1. 按钮名改为“重试”,以便提供一个选项,重新尝试一系列步骤。如果用户按下按钮,GUI元素将返回初始状态(除了禁用QWizard上的"Next“按钮外)。

问题是:对于第二个场景,如何确保在发出的testDone()信号启用后"Next“按钮被禁用?

我想,如果我将特定的信号testDone()QwizardPage断开(在发出信号之后),它将提供所需的结果,但是,它没有工作。我试图断开QWizardPage上的所有连接(例如,this->disconnect),但这也不起作用。还有其他想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-18 09:10:30

要控制页面的“就绪性”,通常需要重写QWizardPage::isComplete并通过QWizardPage::completeChanged发送更改信号。

因此,对于您的示例,您可以给按钮一个属性,并相应地连接它:

代码语言:javascript
复制
class MyButton : public QPushButton
{
    Q_OBJECT

    Q_PROPERTY(bool ready READ isReady NOTIFY readyChanged)

public:
    MyButton(QWidget *parent);
    bool isReady() const;

signals:
    void readyChanged();
};

每当按下按钮或完成测试时,发出信号,并从isReady函数返回所需的按钮状态。

在向导页面中,将isComplete重写为:

代码语言:javascript
复制
bool isComplete() const {
    return QWizardPage::isComplete() && myButton->isReady();
}

并连接页面中的信号:

代码语言:javascript
复制
connect(myButton, &MyButton::readyChanged, this, &MyPage::completeChanged);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46799143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档