我想连接一些函数作为slot而不需要类,我可以这样做吗:
void update() { }int main(){ QTimer timer = ...; QObject::connect(timer, SIGNAL(timeout()), SLOT(update())); return 0;}
void update() { }
int main()
{
QTimer timer = ...;
QObject::connect(timer, SIGNAL(timeout()), SLOT(update()));
return 0;
}
字符串编译器说,没有对象是不可能的。
ffscu2ro1#
AFAIK,您只能将信号连接到插槽,并且插槽只能作为Q_OBLOG的成员函数存在。虽然很多人关注Qt信号和boost::signals或GTKmm信号之间的模板与moc的区别,但这是我最终更关心的区别。Qt的信号没有表达能力,并且导致了比我想要的更多的依赖。我仍然使用Qt,但这只是因为GTKmm可访问性在win32系统上完全缺失。当然,你可以做的是创建一个QTimer的子类,它通过一个插槽连接到自己的超时信号,这个插槽生成一个boost::信号,你可以连接到你的外部函数。注意在Qt中使用boost信号的问题,我只是使用signals2来完全避免它,我得到了线程安全。
68de4m5k2#
你需要Qt识别插槽。要做到这一点,你必须moc一个类。所以我认为这是不可能的。
h4cxqtbf3#
您可以使用Boost的信号槽机制。Boost Signal Slot如果您使用的是Qt 4.1或更高版本,则可以按照此处Boost signals & slots with Qt的说明一起使用
3条答案
按热度按时间ffscu2ro1#
AFAIK,您只能将信号连接到插槽,并且插槽只能作为Q_OBLOG的成员函数存在。
虽然很多人关注Qt信号和boost::signals或GTKmm信号之间的模板与moc的区别,但这是我最终更关心的区别。Qt的信号没有表达能力,并且导致了比我想要的更多的依赖。
我仍然使用Qt,但这只是因为GTKmm可访问性在win32系统上完全缺失。
当然,你可以做的是创建一个QTimer的子类,它通过一个插槽连接到自己的超时信号,这个插槽生成一个boost::信号,你可以连接到你的外部函数。注意在Qt中使用boost信号的问题,我只是使用signals2来完全避免它,我得到了线程安全。
68de4m5k2#
你需要Qt识别插槽。要做到这一点,你必须moc一个类。所以我认为这是不可能的。
h4cxqtbf3#
您可以使用Boost的信号槽机制。Boost Signal Slot
如果您使用的是Qt 4.1或更高版本,则可以按照此处Boost signals & slots with Qt的说明一起使用