Qt学习之信号与槽(一)

目录

QT的信号与槽机制

在窗口的UI设计中操作添加信号和槽

QT的信号与槽机制  

QT的两种机制

在Qt和PyQt中有两种通信机制:

低级事件处理机制(low-level event-handling mechanism)

高级机制(high-level mechanism)

前者是大部分GUI通用的机制,后者是Qt独有机制,也就是信号和槽。
信号与槽会屏蔽底层细节。
什么是底层细节:比如是不需要知道是鼠标点击了按钮还是键盘操作了按钮,最后的结果都是按钮被点击,我们只需要去执行对应的动作(处理信号的为槽函数)。

信号与槽机制

信号(Signal)和槽(Slot)是Qt中核心机制,也是在Pyqt编程对象之间进行通信的机制。

所有从QObject类或其子类(如QWidget)派生的类都能够包含信号和槽。当对象改变其状态(比如点击按钮),信号就由该对象发射出去。槽用于接收信号,但它们是普通的对象成员函数。多个信号可以与单个槽进行连接,单个信号也
可以与多个槽进行连接,所以信号与槽构建了一种强大的控件编程机制。 在Qt编程中,通过Qt信号槽机制对鼠标或键盘在界面上的操作进行响应处理,例如对鼠标单击按钮的处理,Qt中的控件能够发射什么信号,以及在什么情况下发射信号,在Qt文档中有说明,不同的控件能够发射的信号种类和触发时机也是
不同的。在pyqt5编程中,信号与槽通过QObject.signal.connect()连接,这在后面手动连接信号和槽函数的时候会明说。

信号与槽机制示意图

这里我们要明白:

控件的状态发生改变会发射信号,信号要有槽函数去接收处理

所有控件支持信号与槽、预定义信号与槽

信号需要连接到槽,才能得到处理

控件触发后,直接发射出信号就不管了,接下来有没有动作,有没有相应的槽函数去处理,都是用户去处理信号

不同控件发射出的信号类型可能不同

PyQt槽函数,可以是任何可以调用的东西,没有特殊格式要求,而C++槽函数必须固定格式声明

Pyqt的窗口控件类中有很多内置信号,开发者也可以添加自定义信号,信号与槽的特点

一个信号可以连接多个槽

一个信号可以连接另一个信号

信号参数可以是任何Python类型

一个槽可以监听多个信号

信号与槽连接方式可以是同步连接,也可以是异步连接

信号与槽的连接可能会跨线程

信号可能会断开

信号的类型

Qt型信号:Qt预设的信号
Python型信号:在PyQt中自定义的信号,PyQt中使用QObject.emit()方法自定义。
短路信号:没有参数的信号
非短路信号:含有参数的

在窗口的UI设计中操作添加信号和槽

现在我们知道信号与槽是怎么回事,那么应该如何使用这些信号与槽?

如何为控件发射的信号指定对应的处理槽函数

三种方法:
在窗口的UI设计中操作添加信号和槽
通过代码连接信号和槽
通过Eric的‘生成对话框代码’的功能产生信号与槽

在窗口的UI设计中操作添加信号和槽

步骤:
切换编辑模式到信号与槽模式
拖动连接
选择相应的槽函数

步骤1:切换编辑模式到信号与槽模式

单击工具栏里面的"编辑信号/槽"或者通过单击"Edit"(编辑)菜单--〉"编辑信号/槽",进入信号槽编辑模式。

连接信号和槽成功后,会发现在‘编辑信号/槽‘模式下,所创建的信号和槽关系的连线都是红色的。

步骤2:拖动连接

直接在发射者(控件)上按住鼠标左键不放,拖动到接收者(From窗体)上,这样就建立了连接。

步骤3:选择相应的槽函数

在左侧的按钮信号槽里面选择clicked()信号,在右侧的槽函数中选择close(),这意味着对‘关闭窗口’按钮单击会发射clicked信号,这个信号会被from窗体的槽函数close()捕捉到,并触发该窗体的close行为。

上面这个按钮的功能就是点击后关闭窗口

实现流程:按钮是信号发射者,当单击按钮之后会发射一个信号,通过这行代码程序内部的通信机制知道这个按钮的单击事件被连接到窗体的关闭事件上,然后通知接收者窗体,可以运行槽函数close()

我们也使用同样的方法给别的按钮进行处理

我们要知道这些槽函数的功能:

clear():清除文本内容
close():关闭窗口
deleteLater():
hide():隐藏窗口
lower():把文本内容第一个字母变成小写
raise():把文本内容第一个字母变成大写
repaint():再打印一边内容
setFocus():设置焦点
show():显示
showFullScreen():全屏显示窗口
showMaximized():最大化窗口
showMinimized():最小化窗口
showNormal():显示正常的窗口大小
update():更新

  

测试

怎么测试:https://www.cnblogs.com/-wenli/p/10335058.html

测试结果一切正常。

最后:

控件可以把信号发给其他控件,这里我们就可以尝试点击按钮,清空label标签的文本内容。

Qt学习之信号与槽(一)的更多相关文章

  1. qt学习:信号,槽

    [C.GUI.Qt.4编程(第二版)](加)布兰切特,(英)萨默菲尔德.扫描版[学习库www.xuexi111.com].pdf 信号和槽是Qt编程的基础,它可以让各种对象联系在一起. 1. 使用co ...

  2. 【QT学习】信号和槽机制

    QT中发射信号使用 emit 来完成. 类要使用信号和槽机制,必须从QObject或者QObject子类继承.必须在类的定义中加上 Q_OBJECT 宏. 信号和槽连接时,参数类型必须相同. 关键字大 ...

  3. Qt学习笔记----信号与槽实现的四种方式

    1.以按钮为例,首先添加一个按钮,对象名为pushButton,在按钮是右键单击选择“转到槽”即可,在转到槽选择面板(右图)里面选择需要进行的操作,比如单击clicked() 2.选择菜单“编辑”,找 ...

  4. Qt学习笔记 信号和槽

    槽和普通c++成员函数一样只可以为虚函数,也可以被重用,可以是公有的也可以是私有的,也可以被其它的c++函数调用; 参数也是任意的 唯一不同的是本槽和信号是可以连在一起的,和c#的事件差不多.相连后每 ...

  5. Qt入门之信号与槽机制

    一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不 ...

  6. Qt中使用信号和槽的一点心得

    信号(Signal)与槽(Slot)-Qt中的典型机制 这一篇文章中都说得很详细了,这里不再重复,只说一点在实际使用中可能会遇到的问题. 1.一个信号不要同时连接几个槽函数,不然执行的顺序是随机的,最 ...

  7. Qt编程之信号与槽-------unresolved external symbol "public: virtual struct QMetaObject const * __thiscall XX::metaObject(void)const

    原因是加入Q_OBJECT这个macro的类,被编译的时候就要用到moc这个命令,所以在VS2010中,没有加入此命令的应用,当然会出错了.所以解决办法是加,或者如果你不使用信号槽可以直接删除. 当要 ...

  8. Qt 5中信号和槽的新语法

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  9. Qt之自定义信号和槽函数

    自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...

随机推荐

  1. 第19月第2天 cellForItemAtIndexPath 返回空

    1. 动画需要获取当前的 Cell ,下面的调用在 viewDidLoad 中,有时候返回 nil,有时候成功. UICollectionView *cell = (UICollectionView* ...

  2. Java垃圾回收机制复习

    一.如何确定某个对象是“垃圾” 二.典型的垃圾收集算法 三.典型的垃圾收集器 JVM(HotSpot) 7种垃圾收集器的特点及使用场景 https://www.cnblogs.com/chengxuy ...

  3. 论文笔记系列-DARTS: Differentiable Architecture Search

    Summary 我的理解就是原本节点和节点之间操作是离散的,因为就是从若干个操作中选择某一个,而作者试图使用softmax和relaxation(松弛化)将操作连续化,所以模型结构搜索的任务就转变成了 ...

  4. CXF2.7整合spring发布webservice,返回值类型是Map和List<Map>类型

    在昨天研究了发布CXF发布webservice之后想着将以前的项目发布webservice接口,可是怎么也发布不起来,服务启动失败,原来是自己的接口有返回值类型是Map. 研究了一番之后,发现: we ...

  5. kali linux 破解wpa密码

    apt-get update apt-get install hostapd-wpe ls -l /etc/hostapd-wpe/ nano /etc/hostapd-wpe/hostapd-wpe ...

  6. linux 中的 open() read() write() close() 函数

    1. open()函数 功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所需头文件:#include <sys/types.h>,#includ ...

  7. 【转】Python中的字符串与字符编码

    [转]Python中的字符串与字符编码 本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常 ...

  8. Statistics in Python

    Statistics in Python Materials for the “Statistics in Python” euroscipy 2015 tutorial. Requirements ...

  9. Python 优雅获取本机 IP 方法【转】

    转自:https://www.cnblogs.com/lfxiao/p/9672975.html 见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些 不推荐:靠猜测去获取本地IP方法 ...

  10. proc文件系统、sysfs文件系统、kobject操作

    Proc文件系统是提供一个接口给用户,让用户可以查看系统运行的一些状态信息,让用户修改内核的一些参数,比方说printk的打印级别就可以通过proc去修改 Sysfs文件系统, Sysfs is a ...