3

我有一个简单的 GUI:

一个 QPushButton,当点击时,将显示一个数字(比如 11)(我为此使用 QLCDnumber)。再次单击时,应显示另一个数字(例如 10)。

我的目标是为此使用 QAbstractButton::toggled ( bool checked ) 功能。

据我所知,正确的信号槽连接可能如下所示:

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

(我还使用线程,但它们不是问题)

我的问题: 如何在我的信号槽语句中区分“按钮已切换”(选中 = 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)));

这样,切换信号发送的布尔值将被插槽接收。在 slot 函数中,您可以检查接收到的布尔值是否为真。

这里假设 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 回答