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

相关推荐
奶茶戒断高手3 分钟前
【CSP CCF记录】201903-2第16次认证 二十四点
数据结构·c++·算法
一舍予15 分钟前
nuxt3项目搭建相关
开发语言·javascript·vue.js·nuxt
AI人H哥会Java1 小时前
【JAVA】Java基础—面向对象编程:常用API与数据结构—集合框架(List、Set、Map等)
java·开发语言
shepherd枸杞泡茶2 小时前
C# 数据结构之【队列】C#队列
开发语言·数据结构·c#
scoone2 小时前
C++中的原子操作:原子性、内存顺序、性能优化与原子变量赋值
开发语言·c++
轩情吖2 小时前
模拟实现Bash
linux·c语言·开发语言·c++·后端·bash·环境变量
旧故新长2 小时前
版本控制和idea简体中文教程
java·开发语言·intellij-idea
疯一样的码农2 小时前
使用 Maven 构建一个简单的 Java 项目
java·开发语言·maven
易风有点疯2 小时前
Python:序列化
开发语言·python
Biomamba生信基地3 小时前
R语言基础| 时间序列分析
开发语言·r语言·kotlin·编程