Qt 5笔记
1.Qt的信号与槽机制
Qt提供了信号与槽机制用于完成界面操作的响应,是完成任意两个Qt对象之间进行通信的一种机制。信号会在某种情况下被触发,槽则是负责接受并处理这个触发信号的函数。
当一个特定的事件发生时,一个信号被发射出去,与这个信号相关联的槽则会响应这个信号并完成相应的处理。当一个类被继承时,该类的信号与槽都会被继承
信号与槽机制连接方式
1.一个信号与另一个信号连接
connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1));
表示Object1信号1发射可以触发Object2的信号1发射。
2.同一个信号与多个槽连接
connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2));
connect(Object1,SIGNAL(signal2),Object3,SIGNAL(slot1));
表示Object1的信号2发射可以触发Object2和Object3的槽产生响应。
3.同一个槽响应多个信号
connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2));
connect(Object3,SIGNAL(signal2),Object2,SIGNAL(slot2));
表示Object2的槽slot2可以响应Object1和Object2的信号触发。
常用的连接方式为:connect(Object1,SIGNAL(signal1),Object2,SLOT(slot));
表示Object2的槽slot响应Object1的信号signal1。
实际上
SIGNAL()
与SLOT()
是Qt定义的两个宏,它们只是返回其参数的C语言风格的字符串(const char *
)。因此以下关联信号与槽的两条语句是等价的。1.
connect(button,SIGNAL(clicked()),this,SLOT(showArea()));
2.
connect(button,"clicked()",this,"showArea()");
信号与槽机制的好处
- 降低耦合度,激发信号的Qt对象不需要知道是哪一个对象的哪一个槽需要接受它发出的信号,它只需要做的是在适当的时间发送适当的信号就可以了。同样接收信号的那个对象的槽也不需要知道是哪个对象关联了自己,它只需要做的是在接收信号后完成相应的响应即可。即使发送信号的对象被删除也不会影响接受信号的对象完成响应。
- 类型安全,需要关联的信号与槽的签名必须是等同的,即信号的参数类型和参数个数与接受该信号的槽的参数类型和参数个数相同。接受信号的槽的参数的个数可以少于信号的参数个数,但缺少的参数必须是信号参数的最后几个。否则参数不匹配,编译器就会报错。
信号与槽机制的缺点
- 损失了一部分性能,一般通过传第一个信号来调用槽函数将会比直接调用非虚函数运行速度慢10倍。
- 与创建堆对象的
new
操作与删除堆对象的delete
操作相比,信号与槽的机制的运行代价只是它们的很小的一部分,这点性能损耗对于实时应用程序是可以忽略的。
2.Qt 5模板库、工具类及控件
主要介绍Qt的字符串类
QString
,Qt容器类,QVariant
类及Qt常用的算法和正则表达式,然后概括介绍常用的控件名称及其用法。
2.1 字符串类
Qt提供了两种字符串,一种是C语言风格的以
"\0”
字符结尾的字符数组,另一种是字符串类String
,而Qt字符串类QString
的功能更强大。
QString
类保存16位的Unicode值,提供了丰富的操作、查询和转化的函数,该类还进行了隐式共享(implicit sharing)、高效的内存分配策略等多方面的优化。
- 2.2.1 操作字符串
- 2.2.2 查询字符串数据
- 2.2.3 字符串的转换