我经常需要的典型线路是
connect(thread, SIGNAL(started()), this->actExecute, SLOT(setDisabled(>>bool<<)));
Run Code Online (Sandbox Code Playgroud)
但是,你不能连接不同签名的信号/插槽.
通常建议使用辅助方法来触发/发出传递true/false的自定义信号,但是我有许多需要在线程启动/停止/启用时禁用/启用的操作,所以我想避免写几十个辅助功能/信号.
有没有更好的方法(也许是单线解决方案)?
有一种方法可以做到这一点,但它取决于Qt 5和C++ 11.您可以使用lambda表达式使用适当的参数调用插槽.最近有一个问题询问如何专门用QTimers做这个,这里是我之前给出的答案的链接.
基本上,代码看起来像这样 -
connect(thread, &QThread::started, this->actExecute, [=]() {
setDisabled(true);
} );
Run Code Online (Sandbox Code Playgroud)