访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
QT:信号和槽(笔记)(转)
内容导读:
信号和槽是QT的重要概念,其重要性相当于MFC的消息机制,我们所关心的是信号和槽定义的所应采取的形式和所应注意的细节
(1)槽也是普通的C++函数并且可以像它们一样被调用;它们唯一的特点就是它们可以被信号连接。槽的参数不能含有默认值,并且和信号一样,为了槽的参数而使用自己特定的类型是很不明智的
(2)一个槽的访问权限决定了谁可以和它相连:
一个public slots:区包含了任何信号都可以相连的槽。这对于组件编程来说非常有用:你生成了许多对象,它们互相并不知道,把它们的信号和槽连接起来,这样信息就可以正确地传递,并且就像一个铁路模型,把它打开然后让它跑起来。
一个protected slots:区包含了之后这个类和它的子类的信号才能连接的槽。这就是说这些槽只是类的实现的一部分,而不是它和外界的接口。
一个private slots:区包含了之后这个类本身的信号可以连接的槽。这就是说它和这个类是非常紧密的,甚至它的子类都没有获得连接权利这样的信任。
你也可以把槽定义为虚的
(3)信号和槽稍微有些慢,通常,发射一个和槽相连的信号,大约只比直接调用那些非虚函数调用的接收器慢十倍
(4) 函数指针不能作为信号和槽的参数
(5) 友声明不能放在信号部分或者槽部分中
(6) 信号和槽不能被升级
(7) 类型宏不能被用于信号和槽的参数,元对象编译器并不展开#define,在信号和槽中类型宏作为一个参数是不能工作的
(8) 嵌套类不能放在信号部分或者槽部分,也不能含有信号和槽
(9) 构造函数不能用于信号部分和槽部分
(10) 属性的声明应该放在含有相应的读写函数的公有部分之前。
(11)从QObject类或者它的一个子类(比如QWidget类)继承的所有类可以包含信号和槽
(12)在一个定义有信号和槽的类上运行moc。这样就会生成一个可以和其它对象文件编译和连接成引用程序的C++源文件
(13)当一个信号被发射,它所连接的槽会被立即执行,就像一个普通函数调用一样。信号/槽机制完全不依赖于任何一种图形用户界面的事件回路。当所有的槽都返回后 emit也将返回;
如果几个槽被连接到一个信号,当信号被发射时,这些槽就会被按任意顺序一个接一个地执行
(14)信号会由moc自动生成并且一定不要在.cpp文件中实现。它们也不能有任何返回类型(应该使用void)
(15)如果你在你的程序的最后连编阶段得到连接错误,说YourClass::className()是未定义的或者YourClass缺乏vtbl,某样东西已经被做错。绝大多数情况下,你忘记了编译或者#include元对象编译器产生的C++代码,或者(在前面的情况下)没有在连接命令中包含那个对象文件
标签:
来源: 作者: 时间:2006/9/25 16:50:53
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐