2017-10-17 8 views
0

私はQWizardPageを持っています。ここで、特定の手順を実行することになっています。その最後に「テスト」ボタンがあります。ユーザーがそのボタンを押すと、2つの処理が行われますQWizardPage:「次へ」ボタンを再度無効にする方法

  1. 「次へ」ボタンをQWizardの次のページに移動するために有効になります。

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

m_buttonカスタム信号testDone()QPushButtonから派生されています。これは、QWizardPageに接続されているボタンの特殊な信号を発することによって達成されます。

  1. ボタンの名前が「もう一度お試しください」に変更され、一連の手順をもう一度試すことができます。ユーザがボタンを押すと、GUI要素は初期状態(QWizardのボタン「次へ」を無効にすることを除く)に戻ります。

質問は:2番目のシナリオについて、どのように私は、「次へ」ボタンを放出testDone()信号によってイネーブルされた後に無効になりますことを確認していますか?

特定の信号(信号が放出された後に)testDone()を切断した場合、それは望ましい結果をもたらすと考えましたが、動作しませんでした。 QWizardPage(例:this->disconnect)のすべての接続を切断しようとしましたが、これも機能しませんでした。他のアイデア?

答えて

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関数です。

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

と、ページ内の信号を接続します:作品

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

を、感謝としてあなたのウィザードページで

、上書きisComplete!また、このコンテキスト内でQ_PROPERTYを使用する方法を知っておくと便利でした。 – vicrucann

関連する問題