在运行时检查Qt信号槽连接对我来说是一个担忧。应该可以对connect语句进行静态检查。
是否有这样的工具存在?
是否有这样的工具存在?
connect(sender, &Sender::signalMethod, receiver, &Receiver::slotMethod);
有这样的工具吗?
如果有这样的工具就太好了,但很遗憾它并不存在,因为信号/槽机制是在qt中实现的。另外,由于这个原因,无法静态检查信号是否适用于槽。
如果qt使用类似boost的信号/槽机制,那么就可能存在这种工具。
我在我的代码中使用了类似于这样的东西:
#define CONNECT_OR_DIE(source, signal, receiver, slot,connection_type) \
if(!connect(source, signal, receiver, slot,connection_type)) \
qt_assert_x(Q_FUNC_INFO, "CONNECT failed!!", __FILE__, __LINE__);
你无法在编译时检查此问题,但如果在Qt Creator中以调试模式运行程序,则会在应用程序输出窗格中打印有用的诊断消息,如果connect
调用失败。请参见我在这里的回答。
为了处理大型Qt4代码库,我编写了一个插件作为clang静态分析器的检查器。
See: http://reviews.llvm.org/D14592
测试覆盖率示例:
connect(&send, SIGNAL(f2(int, double*)), &recv, SLOT(bugaga(int, double*))); // expected-warning{{Can not find such slot}}