2019独角兽企业重金招聘Python工程师标准>>>

先入一些信号槽的基本介绍:

信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。它为高层次的事件处理自动生成所需要的附加代码。在我们所熟知的很多 GUI 工具包中,窗口小部件 (widget) 都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。但是,在 QT 中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了。
        所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。
        你可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。总之,信号与槽构造了一个强大的部件编程机制。

说实话对于像我这样的新手来说看着就蛋疼,想学会它没办法,我们还是简化一下概念吧:
        所有QObject类都可以使用信号槽,换句话来说继承自pyqt中的类基本上都可以使用信号槽机制。当然非QObject也是可以通过其他一些办法来使用信号槽的。
仅仅有了信号和槽是不行的,我们还需要了解:
        信号(Signal)、槽(slot)、连接(connect)、动作事件(action)、发射(emit)、发送者、接受者等等一些列的知识。好吧,别搞的那么复杂行不行,我们还是学学该怎么用吧。

在Qt Designer中为我们提供了一些基本的信号槽方法,我们来看看:

点击工具栏上的“编辑信号/槽”,进入信号槽编辑模式,我们可以直接在发送者(button)上按住鼠标左键不放,拖动到接收者(Form窗体)上。这样就建立起了连接。

接着,会弹出配置连接对话框。

左边是发送者(按钮)的信号(动作事件),右边是接收者(窗体)的槽(动作事件)

如图所示,我信号选择的是clicked,槽选择的是close

我们看一下编译后生成的代码:
self.quitButton.clicked.connect(Form.close)

实现的功能是:当按钮点击之后关闭窗体。
       流程:按钮是信号发送者,当点击按钮之后会发送一个信号出去,通过这段代码程序内部的通讯机制知道这个按钮的点击事情被连接到窗体的关闭事件上去了,然后通知接受者窗体,你该运行槽函数close了!

那么我们怎么能执行自己的“槽”呢?

[python] view plain copy print?

  1. from PyQt5 import QtWidgets

  2. from untitled import Ui_Form

  3. class mywindow(QtWidgets.QWidget,Ui_Form):

  4. def __init__(self):

  5. super(mywindow,self).__init__()

  6. self.setupUi(self)

  7. self.myButton.clicked.connect(self.myPrint)   #槽函数不用加括号

  8. def myPrint(self):                                #定义槽

  9. print("helloWorld")

  10. if __name__=="__main__":

  11. import sys

  12. app=QtWidgets.QApplication(sys.argv)

  13. myshow=mywindow()

  14. myshow.show()

  15. sys.exit(app.exec_())

from PyQt5 import QtWidgets
from untitled import Ui_Form  class mywindow(QtWidgets.QWidget,Ui_Form):  def __init__(self):  super(mywindow,self).__init__()  self.setupUi(self)self.myButton.clicked.connect(self.myPrint)   #槽函数不用加括号def myPrint(self):                                #定义槽print("helloWorld")if __name__=="__main__":  import sys  app=QtWidgets.QApplication(sys.argv)  myshow=mywindow()  myshow.show()  sys.exit(app.exec_())

小提示:

槽其实就个函数(方法),Qt5中的槽函数不在限定必须是slot,可以是普通的函数、类的普通成员函数、lambda函数等。编译期间就会检查信号与槽是否存在!
        信号的connect连接最好放在__init__析构函数里面,这样只会声明一次连接,如果在类方法(函数中)使用的话,要记得disconnect,否则connect会连接多次,导致程序异常。
        信号槽函数不用加 (),否则可能会导致连接异常。

转载于:https://my.oschina.net/u/1429171/blog/638928

Qt Designer信号和槽相关推荐

  1. qt designer 信号与槽_Qt信号与槽,一直无法执行自定义槽函数,是什么原因

    连接组件本身槽函数成功,但是连接自定义槽函数失败,检查好几遍觉得都有做了,但是就是不能成功执行,帮忙看一下,感谢大佬! 连接槽函数 #ifndef _MYWINDOWS_H #define _MYWI ...

  2. QT 的信号与槽机制介绍

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

  3. 【Qt】Qt中信号与槽

    00. 目录 文章目录 00. 目录 01. 信号与槽 02. 介绍 03. 信号与槽 04. 信号 05. 槽 06. 一个小例子 07. 一个真实的例子 08. 信号和槽使用默认参数 09. 信号 ...

  4. C++框架_之Qt的信号和槽的详解

    目录 C++_之Qt的信号和槽的详解 1.概述 1.1对象树(子对象动态分配空间不需要释放) 2.信号和槽 Qt5 的书写方式:(推荐的使用)★★★★★ Qt4 的书写方式: 3.自定义信号槽 3.1 ...

  5. 【qt】QT 的信号与槽机制

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

  6. 【转载】QT 的信号与槽机制介绍

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

  7. QT下信号与槽不在同一个线程中如何connect

    QT下信号与槽不在同一个线程中如何connect

  8. QT 读取csv文件-QT根据显示器大小设置窗口大小-QT绑定信号与槽

    QT 读取csv文件 废话不多说先上代码, 需要引入的头文件: 函数是自己写的一个小项目截取的一段,基本上思路就是这个.读取csv格式的和读取txt文件类似. #include <QFile&g ...

  9. Qt的信号和槽是如何工作的

     用Qt做过开发的朋友,不知道是否曾为下面这些问题疑惑过: 我们知道Qt是基于C++的,Qt写的代码最终还是要由C++编译器来编译,但是我们的Qt代码中有很多C++里没有的关键字,比如slots\ ...

最新文章

  1. 打开FTP时,让文件以文件夹的形式显现
  2. json数据映射到html,在GoLang中将Json数据映射到Html模板
  3. Personal Introduction—037尤碧璇
  4. 剑灵服务器延迟时间在哪看,怎么通过任务管理器看剑灵网络延迟
  5. 深度学习(deep learning)优化调参细节(trick)
  6. 爱立信实习总结之面试心得
  7. 基于arduino制作激光电子竖琴
  8. 小程序毕设作品之微信企业公司小程序毕业设计(6)开题答辩PPT
  9. python猜数字游戏编程、直到猜对为止显示猜了几次_python编写猜数字小游戏
  10. .NET Standard详解
  11. cad2006计算机丢失,win10系统无法打开CAD2006提示“计算机中丢失ac1st16.dll”的解决方法...
  12. Ringbuffer同步问题分析
  13. 华硕fl5600l笔记本拆机,在光驱位加装固态硬盘
  14. php 微信公众号自定义菜单栏,php实现微信公众号创建自定义菜单
  15. 现汇买入价/现钞买入价/卖出价/基准价/中行折算价的概念
  16. 一次简单的PC游戏汉化
  17. 有什么好用的测量仪器尺子?手机也能其妙满足
  18. To install it ,you can run npm i -- save vuetypesumd
  19. 微巨科技:公众号迁移公证流程及注意事项
  20. 吴恩达深度学习视频笔记

热门文章

  1. 魔改CNN揭秘宇宙大爆炸:物理学的核心是对称性
  2. 2040张图片训练出的ViT,准确率96.7%,连迁移性能都令人惊讶 | 南京大学
  3. 特斯拉车主「作死」成真:炫耀「主驾无人」,自动驾驶导致车毁人亡
  4. 烧了微软10000张GPU,这伙人铁了心要砸大家的饭碗
  5. 帮初学者快速上手机器学习,这有一份Colab资源大全
  6. 硬件厂商纷纷“变软”:FPGA行业巨头Xilinx推出Vitis AI平台,并在GitHub上开源
  7. AI硬件碎片化难题,英特尔想用“一个API”解决,还推出新的编程语言DPC++
  8. 003:Virtualenvwrapper使用
  9. 【Linux使用技巧】linux 死机了怎么办
  10. 用好这6个新功能,让你的项目设计事半功倍