2016-07-04 10 views
1

私はQLabelに接続したいQLineEditを持っていますので、入力されたテキストの妥当性に依存します。私はこれを行う際に2つの問題があります。Qtスロットと信号。スロットレシーバオブジェクトを取得

QLineEdit *text = new QLineEdit(this); 
layout->addWidget(text, rowno, 0); 
QLabel *button = new QLabel(this); 
button->setStyleSheet("QLabel { background-color : green; color : white; }"); 
button->setAlignment(Qt::AlignCenter); 
button->setText("OKAY"); 
QObject::connect(text, SIGNAL(textEdited(const QString &)), button, SLOT(CheckValidity(const QString &))); 

これはQLineEditの変更を私のカスタムスロットに接続しません。私は理由を理解できません! カスタムスロットでも、渡されたQStringに応じて、自分のラベルの背景色を変更したいと思います。ラベルの参照を取得するにはどうすればよいですか?それは信号の受信機として存在しますが、私はそれを参照する方法を理解できません。

答えて

1

CheckValidityは、QButtonのスロットではなく、自分のクラスで定義されたカスタムスロットです(指定していないので、これを想定しています)。 (なぜbutton

QLabel *sender_label = qobject_cast<QLabel*> (sender()); 
+0

は、私は、カスタムスロットに引数としてラベルを渡すことはできますか?私は、QTシグナルとスロットは同じ数の引数を持つ必要があると信じていますが、特定のラベルを特定のテキストボックスに接続する必要があり、実行時にユーザによって動的に作成されるため、 –

0
  1. QLabelにはCheckValidityスロットがありません:あなたは、送信者のオブジェクトを知りたい場合は

    QObject::connect(text, SIGNAL(textEdited(const QString &)), this, SLOT(CheckValidity(const QString &))); 
    

    、使用qobject_cast

    だから、最後の行への変更QLabel?)。接続試行後、デバッガの出力ウィンドウを確認してください。

  2. QObject::sender() + cast。キャストがdynamic_castまたはqobject_castの場合は、Qtアシスタントの違いを見てください。
0

あなたのスロット呼び出しに追加の引数を指定したい場合は、代わりにスロットのラムダを使用することができます。

QObject::connect(text, &QLineEdit::textEdited, [=](const QString &text) { checkValidity(button, text); }); 
関連する問題