Qt函数:
1.Touper:全部转大写
2.ToLower:全部转小写
3.QString::number(4300): 数字转QString类型
4.trimmed:删除字符串两端的空格 (包括换行)
正则:
QComboBox: 下拉框
下拉框获取对应选中的下标
QCheckBox: 复选框
Qt信号和槽概述
信号和槽是一种高级接口 ,应用于对象之间的通信,它是QT的核心特性 ,也是QT区别于其它工具包的重要地方。信号和槽是QT自行定义的一种通信机制 ,它独立 于标准的C/C++语言,因此要正确的处理信号和槽,必须借助一个称为 moc ****(Meta Object Compiler)****的QT工具,该工具是一个C++预处理程序,它为高层次的事件处理自动生成所需要的附加代码。
在所有从 QObject或其子类(例如Qwidget)派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射(emit)出去,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。
信号槽是Qt对象间通讯的方法,主要通过connect()函数连接信号函数和槽函数进行通讯connect()是QObject类的一个静态函数;
信号和槽示意图
1. 信号 : 本质是类的 普通成员函数[cpp中不需要实现 ,允许函数重载,只关心参数数据类型]
signal:
1..当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。
2.只有定义过这个信号的类及其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。
3.信号-槽机制完全独立于任何GUI事件循环。
4.如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪个后执行。
信号的分类:
1.系统信号: clicked currentIndexChange( int ) currentIndexChange( QString )
2.自定义信号
如何编写信号
信号的声明是在头文件 中进行的,QT的signals关键字指出进入了信号声明区,随后即可声明自己的信号。下面定义了三个信号:
signals:
void mySignal();
void mySignal(int x);
void mySignalParam(int x,int y);
在上面的定义中,signals是QT的关键字 ,而非C/C++的。接下来的一行void mySignal() 定义了信号mySignal ,这个信号没有携带参数;接下来的一行void mySignal(int x)定义了重名信号mySignal,但是它携带一个整形参数,这有点类似于C++中的虚函数。从形式上讲信号的声明与普通的C++函数是一样的,但是信号却没有函数体定义 ,另外,信号的返回 类型都是void.
2. 槽 : 本质是类的 普通成员函数, 允许函数重载,只关心参数数据类型]
槽是普通的C++成员函数 ,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联 。当与其关联的信号被发射时,这个槽就会被调用 。槽可以有参数 ,但槽的参数不能有缺省值。
同普通的C++成员函数一样,槽函数也分为三种类型,即public slots、private slots和protected slots。
槽也能够声明为虚函数,这也是非常有用的
系统槽 : show(); hide(); close(); resize() 自定义槽: getCode()
槽函数类型 : 继承过程中不允许访问升级
public slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。这对于组件编程非常有用,你可以创建彼此互不了解的对象,将它们的信号与槽进行连接以便信息能够正确的传递。
****protected slots:****在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。这适用于那些槽,它们是类实现的一部分,但是其界面接口却面向外部。
****private slots:****在这个区内声明的槽意味着只有类自己可以将信号与之相连接。这适用于联系非常紧密的类。
如何编写槽
槽的声明也是在头文件中进行的。例如,下面声明了三个槽:
public slots:
void mySlot();
void mySlot(int x);
void mySignalParam(int x,int y);
QObject::disconnect: 断开信号与槽的连接
当信号与槽没有必要继续保持关联时,我们可以使用disconnect函数来断开连接。
bool QObject::disconnect ( const QObject * sender, const char * signal, const Object * receiver, const char * member ) [static]
槽和信号限制
1. 类型宏 不能被用于信号和槽的 参数
2.构造函数不能用于信号部分和槽部分
3 .函数指针 不能作为信号或槽的参数。
4.信号和槽不能被 访问升级
槽和信号其它限制
1. 如果一个信号与多个槽相联系的话,那么,当这个信号被发射时,与之相关的槽被激活的顺序将是 随机 的。
2. 信号与槽也不能携带模板类参数。
3. 嵌套的类 不能位于信号或槽区域内也不能有信号或者槽。
4. 友元声明 不能位于信号或者槽声明区内。
3.连接connect: 一个信号连接多个槽函数的时候 触发顺序是随机的
Connect(发送者,SIGNAL(信号),接受者,SLOT(槽函数),Qt::ConnectionType[连接方式]);
Qt::connectionType Qt::AutoConnection自动连接
连接方式1: 信号与槽在同一个类中 信号触发后 立即响应
连接方式2: 信号与槽不在同一个线程中 信号触发后,进入队列 槽函数只能 逐个信号处理
连接种类:
1.一个信号连接一个槽
2.一个信号连接多个槽:
触发顺序是随机的,如 果有特定的执行顺序,需要将多个槽写在一个槽函数中
3.多个信号连接一个槽
4.信号连接信号:
手动触发 emit: setColor是手动触发的槽函数
Emit 信号名称([实参列表])
元对象工具: 把包含有信号和槽的源文件编译成特殊的文件名
元对象编译器moc(meta object compiler)对C++文件中的类声明进行分析并产生 用于初始化元对象的C++代码 ,元对象包含全部信号和槽 的名字以及指向这些函数的指针。
元对象代码是signal/slot 机制所必须的。用moc产生的C++源文件必须与类实现一起进行编译和连接, 每个拥有信号和槽的类都会被moc创建出一个moc文件 ( C++源文件 ) 元对象系统: 分为三大类:QObject类、Q_ OBJECTQ宏和元对象编译器moc