2

Qt4.8.5

 QObject::connect(button,SIGNAL(clicked()),label,SLOT(setText("dd"));

Qt Creator は、 It's wrong と教えてくれます。どうしたの ?

4

3 に答える 3

0

正直に言うと、あなたが提供したサンプルコードはあまり機能的ではありません.「dd」はあなたが使用している特定の静的な値ですか、それとも潜在的に他の文字列ですか? それはどこから来たのか、呼び出されたスコープ内にあるのか、それともスロットに引数を送信するときの通常の方法である呼び出し元によって送信されたのか。

いずれにせよ、接続ステートメントを作成するための最初の要件は、引数が一致し、引数clicked()がなくても引数setText()があるため、不一致が発生することです。この不一致を解決する最も簡単な方法は単純なラッパーを使用することですがQSignalMapper、Qt5 ではラムダと std::bind を使用できます。

まず、接続ステートメントで実際の引数インスタンスを指定することはできません。両側に引数がある場合でも、オーバーロードを解決するのに役立つタイプを指定するだけでよく (Qt5 の新しい接続構文ではひどいことです)、実際の識別子は指定しません。またはリテラル。

データが呼び出し元によってスロットに送信される、より一般的なシナリオの場合、識別子またはリテラルはemit signal(value)ステートメントで指定されます。clicked(const QString &)接続してそのラッパースロットの値で発行するラッパースロットが必要ないためclicked()、ボタンをサブクラス化して独自のオーバーロードを追加しますclicked(QString)

値が呼び出されたオブジェクトのスコープ内にある場合、サブクラス化はあまり意味がありません。必要なのは、呼び出されたオブジェクトのスコープ内のラッパー スロットだけです。

さらに必要な場合は、構文が大幅に強力な Qt 5 を使用する必要があります。

于 2013-07-06T12:12:37.667 に答える
0

質問が間違っている場合は、パラメーター番号がシグナルとスロットで同じでなければならないことを覚えておいてください。同僚に尋ねると、Peppe によると、setText(QString) は 1 つのパラメーターを待機し、Clicked() は空です... カスタム スロットは setText() メソッドを間接的に呼び出すことです。

あなたはそれを見ることができます: http://qt-project.org/doc/qt-4.8/widgets-calculator.html QML の横にある Qt インターフェイスの重要な部分である QWidget を使用します。

于 2014-04-04T13:46:09.063 に答える