3

私はシンプルなGUIを持っています:

QPushButton をクリックすると、数字 (11 など) が表示されます (これには QLCDnumber を使用します)。もう一度クリックすると、別の数字が表示されます (10 など)。

私の目的は、これに QAbstractButton::toggled ( bool checked ) 機能を使用することです。

私が学んだように、適切なシグナルスロット接続は次のようになります。

connect(ui.startstopButton, SIGNAL(toggled(bool)), thread, SLOT(start()));

(私はさらにスレッドを使用しますが、問題ではありません)

私の質問: signal-slot-statement で「ボタンが切り替えられている」(checked = true) と「ボタンが切り替えられていない」(ckecked = false) を区別するにはどうすればよいですか?

SIGNAL(toggled(bool = true))SIGNAL(toggled(bool checked = true))またはのようなバリエーションを使用SIGNAL(toggled(true))しましたが、どちらも機能していません。私は常にデバッガーメッセージを受け取ります:

Object::connect: No such signal QPushButton::toggled(bool = true) in testthread.cpp:15
Object::connect:  (sender name:   'startstopButton')

私は間違いなくsetCheckableボタンを有効にしました。

4

2 に答える 2

3

信号はただtoggled(bool)です、受信側もboolパラメータを持っています:

connect(ui.startstopButton, SIGNAL(toggled(bool)), thread, SLOT(start(bool)));

このようにして、トグル信号によって送信されたブール値がスロットによって受信されます。スロット機能では、受信したブール値がtrueかどうかを確認できます。

ここでは、thread:start()が実際に作成した関数であると想定しています。そうでない場合は、ブール値をチェックする新しいスロットを作成してから、スレッドを開始します。

connect(ui.startstopButton, SIGNAL(toggled(bool)), threadStarter, SLOT(start(bool)));
于 2013-03-18T10:19:14.070 に答える
0

それはいけません。代わりに、カスタム スロットに渡すことができます。

void checkIt(bool checked) // This is a slot
{
}

// ...

connect(ui.startstopButton, SIGNAL(toggled(bool)), thread, SLOT(checkIt(bool)));
于 2013-03-18T10:21:45.040 に答える