我经常需要的典型行是
connect(thread, SIGNAL(started()), this->actExecute, SLOT(setDisabled(>>bool<<)));
但是你不能用不同的签名连接信号/插槽。
通常建议使用辅助方法来触发/发出传递true / false的自定义信号,但是我有很多需要在线程启动/停止/启用时禁用/启用的操作,所以我想要避免写几十个辅助函数/信号。
有没有更好的方法(也许是单线解决方案)?
答案 0 :(得分:5)
有一种方法可以做到这一点,但它取决于Qt 5和C ++ 11。您可以使用lambda表达式使用适当的参数调用插槽。最近有一个问题询问如何使用QTimers here is a link to the answer I gave earlier专门执行此操作。
基本上,代码看起来像这样 -
connect(thread, &QThread::started, this->actExecute, [=]() {
setDisabled(true);
} );
答案 1 :(得分:1)
通过从QAction
派生来制作您自己的Action类,并为其添加简单的disable()
和enable()
个广告位。
答案 2 :(得分:0)
如果无法使用Qt 5
和C++11
,则此问题有两种可能的解决方案:
导出QAction
并在@Roku中添加2个简单的插槽(禁用/启用)。
导出QThread
并添加一个额外的信号started(bool)
,当true
信号发出时,started()
参数会发出false
参数,并带有finished()
参数发出terminated()
或{{1}}信号虽然我必须注意,通过线程已完成的启动(错误)信号通知并不是那么直观,特别是如果您正在开发将由其他人。
如果两种方法都让你改变了很多代码,那么我建议使用辅助方法。除此之外,我认为你没有更好的选择。