2

昨天我在 Qt 中处理一个项目,所以我对一个我认为是公开的插槽进行了延迟调用。所以我写道:

QTimer::singleShot();

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

这可能是私有插槽的解决方法:

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

为什么 Qt 中的声明不一致?

4

1 回答 1

2

@hate-engine 的答案有点扩大

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

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

没有什么神秘的))

于 2012-12-21T14:25:23.797 回答