自学内容网 自学内容网

Qt信号和槽的连接以及复选框和下拉框

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


原文地址:https://blog.csdn.net/nnan77/article/details/140557390

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!