代码之家  ›  专栏  ›  技术社区  ›  vicrucann

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

  •  1
  • vicrucann  · 技术社区  · 7 年前

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

    1. “下一步”按钮被启用,以便转到 QWizard . 这是通过发出一个按钮的特殊信号来实现的,该信号连接到 QWizardPage :

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

    m_button 派生自 QPushButton 带有自定义信号 testDone() .

    1. 除了禁用上的“下一步”按钮 Q向导 ).

    问题是: testDone() 信号

    我想如果我断开特定的信号 testDone() 从…起 QwizardPage (在发射后),它将产生预期的结果,但是,它不起作用。我试图断开网络上的所有连接 QWizardPage (例如。 this->disconnect ),但这也不起作用。还有其他想法吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Felix    7 年前

    为了控制页面的“可读性”,通常需要覆盖 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);