认识Qter

来源:互联网 发布:网络运营和网络推广 编辑:程序博客网 时间:2024/05/17 00:57
//main.cpp//包含了程序中要完成的功能的Dialog类的定义#include "dialog.h"//每一个使用Qt图形化应用程序中都必须使用一个QApplication对象,它管理了各种各样的图形化程序的广泛资源,基本设置,控制流及事件处理   #include <QApplication>   //应用程序的入口,几乎所有使用Qt的情况下,main函数只需要在将控制权转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为int main(int argc, char *argv[])    {    //a是这个程序的QApplication对象,在任何Qt的窗口系统部件被使用之前必须创建QApplication对象,它在这里被创建并且处理这些命令行变量,所有被Qt识别的命令行参数都将从argv中被移去(并且argc也相应的减少)    QApplication a(argc, argv);    Dialog w;    w.show();//当创建一个窗口部件的时候,默认它是不可见的,必须调用show函数使它可见  return a.exec();    //程序进入消息循环,等待可能的输入进行相应。这里就是main函数将控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()函数的值就会返回。}

伙伴编辑模式:

QLabel标签和伙伴窗口部件包括一个标签和一个窗口部件,它们具有伙伴关系,即指当用户激活标签的快捷键时,鼠标/键盘的焦点将会转移到它的伙伴窗口部件上。只有QLabel标签对象才可以有伙伴窗口部件,也只有该QLabel对象具有快捷键时(在显示文本的某个字符前加一个前缀”&”,就可以定义快捷键),伙伴关系才有效。
例如:

QLineEdit* ageLineEdit = new QLineEdit(this);QLabel* ageLabel = new QLabel("&Age",this);ageLabel->setBuddy(ageLineEdit);

代码定义了ageLabel标签的组合键为【ALT+A】,并将行编辑框ageLineEdit设为它的伙伴窗口部件,当按下组合键【ALT+A】时,焦点将会跳至行编辑框ageLineEdit中。

信号和槽机制:
    Qt提供了信号和槽机制用于完成界面操作的响应,是完成任意两个Qt对象之间的通信机制。其中,信号会在某个特定的情况或动作下被触发,槽是等同于接收并处理信号的函数。每个Qt对象都包含若干个预定义的信号和若干个预定义的槽,当某个特定事件发生时,一个信号被发送,与信号相关联的槽则会响应信号并完成相应的处理。当一个类被继承时,该类的信号和槽也同时被继承,也可以根据需要自定义信号和槽。

1. 信号与槽的连接方式

(1) 一个信号可以与另一个信号相连,代码如下:

connect(Object1,SIGNAL(signal1),Obejct2,SIGNAL(signal1));

(2) 同一个信号可以与多个槽相连,代码如下:

connect(Object1,SIGNAL(signal2),Obejct2,SIGNAL(slot2));connect(Object1,SIGNAL(signal2),Obejct3,SIGNAL(slot1));

(3)同一个槽可以相应多个信号

connect(Object1,SIGNAL(signal2),Obejct2,SIGNAL(slot2));connect(Object3,SIGNAL(signal2),Obejct2,SIGNAL(slot2));

常用的连接方式:

connect(Object1,SIGNAL(signal1),Obejct2,SIGNAL(slot));

2. 信号与槽机制的优点:

(1)类型安全。需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数与接收该信号的槽的参数类型和参数个数是相同。不过,一个槽的参数个数可以少于信号的参数个数的,但缺少的参数必须是信号参数的最后一个或几个参数。如果信号和槽的签名不符,编译器就会报错。

(2)松散耦合。信号与槽的机制减弱了Qt对象的耦合度。激发信号的Qt对象无需知道是哪个对象的哪个槽需要接收它发出的信号,它只需要做的是在适当的时间发送适当的信号就可以了,而不需要知道也不关心它的信号有没有被接收到,更不需要知道是哪个对象的哪个槽接收到了信号。同样,对象的槽也不知道是哪些信号关联了自己,而一旦关联信号和槽,Qt就保证了适合的槽得到了调用。即使关联的对象在运行时被删除,应用程序也不会崩溃。

一个类若要支持信号和槽,就必须从QObject或QObject的子类继承。注意,Qt信号和槽机制不支持对模板的使用。

3.信号与槽机制的效率

信号与槽机制增强了对象间通信的灵活性,然而这也损失了一些性能。同回调函数相比,信号和槽机制运行速度有点慢。通常传递一个信号来调用槽函数比直接调用非虚函数运行速度慢10倍。原因主要如下:
(1)需要定位接收信号的对象。
(2)安全地遍历所有的关联
(3)编组/解组传递的参数
(4)多线程的时候,信号可能需要排队等待

0 0