我想将一些功能连接为没有类的插槽,我可以这样做:
void update() { }
int main()
{
QTimer timer = ...;
QObject::connect(timer, SIGNAL(timeout()), SLOT(update()));
return 0;
}
编译器说,没有对象是不可能的。
AFAIK,您只能将信号连接到插槽,而插槽只能作为 Q_OBJECT 的成员函数存在。
虽然许多人关注 Qt 信号和 boost::signals 或 GTKmm 信号之间的模板与 moc 差异,但这是我最终更关心的差异。Qt 的信号没有表现力,并且导致比我想要的更多的依赖关系。
我仍然使用 Qt,但这只是因为在 win32 系统上完全缺少 GTKmm 可访问性。
当然,你可以做的是创建一个 QTimer 的子类,它使用一个插槽连接到它自己的超时信号,该插槽生成一个 boost::signal,你可以连接到你的外部函数。不过,请注意在 Qt 中使用 boost 信号的问题,我只是使用 signals2 来完全避免它,并且我获得了线程安全。
您需要 Qt 识别插槽。为此,您必须 moc 一个类。所以我会说不可能。
您可以使用 Boost 的信号槽机制。升压信号槽
如果您使用的是 Qt 4.1 或更高版本,则两者可以一起使用,如此处所述Boost signals & slots with Qt