使用没有参数的信号启用/禁用QAction的简单方法是什么?

时间:2013-08-19 20:00:45

标签: qt qt-signals

我经常需要的典型行是

connect(thread, SIGNAL(started()), this->actExecute, SLOT(setDisabled(>>bool<<)));

但是你不能用不同的签名连接信号/插槽。

通常建议使用辅助方法来触发/发出传递true / false的自定义信号,但是我有很多需要在线程启动/停止/启用时禁用/启用的操作,所以我想要避免写几十个辅助函数/信号。

有没有更好的方法(也许是单线解决方案)?

3 个答案:

答案 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 5C++11,则此问题有两种可能的解决方案:

1)导出QAction

导出QAction并在@Roku中添加2个简单的插槽(禁用/启用)。

2)导出QThread

导出QThread并添加一个额外的信号started(bool),当true信号发出时,started()参数会发出false参数,并带有finished()参数发出terminated()或{{1}}信号虽然我必须注意,通过线程已完成的启动(错误)信号通知并不是那么直观,特别是如果您正在开发将由其他人。

如果两种方法都让你改变了很多代码,那么我建议使用辅助方法。除此之外,我认为你没有更好的选择。