QWizardPage:如何重新禁用"下一步"按键

时间:2017-10-17 20:59:32

标签: qt signals-slots qwizard

我有QWizardPage用户应该经过某些步骤,最后有一个按钮"测试"。如果用户按下该按钮,则会发生两件事:

  1. "接着"按钮已启用,以转到QWizard的下一页。这是通过发出按钮的特殊信号来实现的,该信号连接到QWizardPage

    this->registerField("test*", m_button, "text", SIGNAL(testDone()));

  2. m_button源自QPushButton,带有自定义信号testDone()

    1. 按钮名称更改为"再次尝试"为了提供一个选项来重新尝试一系列步骤。如果用户按下按钮,GUI元素将返回初始状态(除了禁用按钮"下一步"在QWizard 上)。
    2. 问题是:对于第二种情况,我该如何确保"下一步"按钮被发出的testDone()信号启用后被禁用?

      我想如果我将testDone()QwizardPage中的特定信号断开(在发出之后),它会产生预期的结果,但是,它不起作用。我试图断开QWizardPage上的所有内容(例如this->disconnect),但这也无效。还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

要控制页面“准备就绪”,您通常会覆盖QWizardPage::isComplete并通过QWizardPage::completeChanged发出更改信号。

因此,对于您的示例,您可以为按钮指定属性并相应地连接它:

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覆盖为:

bool isComplete() const {
    return QWizardPage::isComplete() && myButton->isReady();
}

并连接页面中的信号:

connect(myButton, &MyButton::readyChanged, this, &MyPage::completeChanged);