声明私人插槽Qt不一致

时间:2012-12-21 12:10:54

标签: c++ qt signals-slots

昨天我正在Qt的一个项目工作,所以我拨打了一个我认为是公开的插槽。所以我写道:

QTimer::singleShot();

调用那个插槽但最后我看到那个插槽是私有的。

这可能是私人广告位的解决方法:

QTimer::singleShot(0,class,SLOT(class::privateSlot()))

为什么Qt中的声明存在这种不一致?

1 个答案:

答案 0 :(得分:2)

@ hate-engine的答案略微扩大

查找并查看包含源名称和前缀moc_的文件(例如moc_my_class.cpp)。当您在类声明中添加Q_OBJECT宏时,此文件由moc-compiler生成。这个宏为你的类声明添加了几个方法,moc_my_class.cpp包含了这些方法的定义。

现在看一下方法MyClass::qt_metacall。可以从其他地方调用此方法,因为它是公共的。另一方面,它可以调用MyClass的私有方法,因为它们属于类MyClass

没有神秘感))