罗泽轩*_*罗泽轩 26 c++ qt signals-slots
在C++中,public意味着可以从对象可见的任何位置访问的成员,private意味着成员只能从同一类的其他成员或其朋友中访问.
但在Qt中,差异private slots并且public slots似乎并不存在.我最近几天开始写Qt,而且我private slots一直都在使用.
有人告诉我应该用public slots.所以现在我很困惑.我在Qt的文档中找不到参考信息.
两种类型之间的实际差异是什么?
Zla*_*mir 14
编译器在编译时"检查"私有/公共访问,但信号槽连接在运行时执行,并且某些QMetaObject机制(例如invokeMethod)调用槽.
所以区别在于:私有槽是私有的,如果称为常规成员函数,但总是" 公共 "用于调用信号,一个很好的理由是因为槽在概念上是公共接口,因为它们的主要目的是对象间通信
关于一些相关"怪异"东西的另一个例子是私有虚函数的调用,如果它们在用于调用方法的指针的静态类型中是公共的.
@ user2448027答案是正确的,但在Qt的设计模式缺少一点:不同的应用程序的private slotsVS public slots.
通过创建插槽,private您可以强制对象的用户使用connect函数来调用插槽,而不是成员访问操作符(.或->).
想象一下,你班级的其中一个插槽中有一个缓慢或阻塞的代码.您希望类的用户将创建的对象移动到另一个线程,因此该对象的所有者(GUI或某些与GUI相关的对象)不会通过调用此插槽来冻结或阻止.重点是:如果插槽由.或->运算符直接调用,它将阻塞.因为调用方法的当前线程使用插槽,所以只有在使用公共插槽时才会发生.解决方案是创建插槽private,因此用户只能使用connect成员访问操作符(.或->)来调用它.
结论:
private.public.public足够了.