昨天我正在Qt的一个项目工作,所以我拨打了一个我认为是公开的插槽。所以我写道:
QTimer::singleShot();
调用那个插槽但最后我看到那个插槽是私有的。
这可能是私人广告位的解决方法:
QTimer::singleShot(0,class,SLOT(class::privateSlot()))
为什么Qt中的声明存在这种不一致?
答案 0 :(得分:2)
@ hate-engine的答案略微扩大
查找并查看包含源名称和前缀moc_
的文件(例如moc_my_class.cpp
)。当您在类声明中添加Q_OBJECT
宏时,此文件由moc-compiler生成。这个宏为你的类声明添加了几个方法,moc_my_class.cpp
包含了这些方法的定义。
现在看一下方法MyClass::qt_metacall
。可以从其他地方调用此方法,因为它是公共的。另一方面,它可以调用MyClass
的私有方法,因为它们属于类MyClass
。
没有神秘感))