c++ 无对象连接

7y4bm7vi  于 2024-01-09  发布在  其他
关注(0)|答案(3)|浏览(195)

我想连接一些函数作为slot而不需要类,我可以这样做吗:

  1. void update() { }
  2. int main()
  3. {
  4. QTimer timer = ...;
  5. QObject::connect(timer, SIGNAL(timeout()), SLOT(update()));
  6. return 0;
  7. }

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

ffscu2ro

ffscu2ro1#

AFAIK,您只能将信号连接到插槽,并且插槽只能作为Q_OBLOG的成员函数存在。
虽然很多人关注Qt信号和boost::signals或GTKmm信号之间的模板与moc的区别,但这是我最终更关心的区别。Qt的信号没有表达能力,并且导致了比我想要的更多的依赖。
我仍然使用Qt,但这只是因为GTKmm可访问性在win32系统上完全缺失。
当然,你可以做的是创建一个QTimer的子类,它通过一个插槽连接到自己的超时信号,这个插槽生成一个boost::信号,你可以连接到你的外部函数。注意在Qt中使用boost信号的问题,我只是使用signals2来完全避免它,我得到了线程安全。

68de4m5k

68de4m5k2#

你需要Qt识别插槽。要做到这一点,你必须moc一个类。所以我认为这是不可能的。

h4cxqtbf

h4cxqtbf3#

您可以使用Boost的信号槽机制。Boost Signal Slot
如果您使用的是Qt 4.1或更高版本,则可以按照此处Boost signals & slots with Qt的说明一起使用

相关问题