2

我想将一些功能连接为没有类的插槽,我可以这样做:

void update() { }

int main()
{
  QTimer timer = ...;
  QObject::connect(timer, SIGNAL(timeout()), SLOT(update()));
  return 0;
}

编译器说,没有对象是不可能的。

4

3 回答 3

2

AFAIK,您只能将信号连接到插槽,而插槽只能作为 Q_OBJECT 的成员函数存在。

虽然许多人关注 Qt 信号和 boost::signals 或 GTKmm 信号之间的模板与 moc 差异,但这是我最终更关心的差异。Qt 的信号没有表现力,并且导致比我想要的更多的依赖关系。

我仍然使用 Qt,但这只是因为在 win32 系统上完全缺少 GTKmm 可访问性。

当然,你可以做的是创建一个 QTimer 的子类,它使用一个插槽连接到它自己的超时信号,该插槽生成一个 boost::signal,你可以连接到你的外部函数。不过,请注意在 Qt 中使用 boost 信号的问题,我只是使用 signals2 来完全避免它,并且我获得了线程安全。

于 2010-11-24T18:40:48.103 回答
1

您需要 Qt 识别插槽。为此,您必须 moc 一个类。所以我会说不可能。

于 2010-11-24T18:31:08.403 回答
1

您可以使用 Boost 的信号槽机制。升压信号槽

如果您使用的是 Qt 4.1 或更高版本,则两者可以一起使用,如此处所述Boost signals & slots with Qt

于 2012-02-27T06:45:18.760 回答