1.前言

为了处理个体间的通信事件,Qt提供了信号与槽。信号与槽不仅可以处理GUI上发生的事件,也可以实现个体间的数据通信。值得深入把握。

2.信号与槽

信号与槽是一种用于对象间通信的机制。为了用户在GUI程序点击按钮控件时可运行指定函数,信号与槽提供可运行指定函数的框架。处理多种用户事件前,信号和槽提供多种回调(Callback)函数

Qt提供的所有控件拥有多种预设信号。例如,QPushButton控件的单击(click)双击(double click)、鼠标经过(mouse over)等多重信号。同时,槽也提供了多种虚函数(virtual function)

信号用于处理发生的事件,而槽则是指定从信号接受事件的处理函数。因此,可以将信号和槽视为一个管道(pipeline).

根据上面的描述,我们也能注意到一个很重要的一点:信号与槽通常不是1:1匹配的。一个信号可以关联多个槽,一个槽也可以关联多个信号。示意图如下:

信号与槽之间的关联函数是connect函数。

3.典型实例

主文件 main.cpp:

#include "mysigslot.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);mySigSlot w;w.resize(400, 300);w.setWindowTitle("Example for Signal-Slot");w.show();return a.exec();
}

头文件 mySigSlot.h:

#ifndef MYSIGSLOT_H
#define MYSIGSLOT_H#include <QtWidgets/QWidget>
#include "ui_mysigslot.h"
#include <qlabel.h>
/*********************************************************/
class mySigSlot : public QWidget
{Q_OBJECTpublic:mySigSlot(QWidget *parent = 0);~mySigSlot();private:Ui::mySigSlotClass ui;
private:QLabel* lbl;
};
/*********************************************************/
class SignalSlot : public QObject
{Q_OBJECT
public:SignalSlot()     { m_value = 0; }int value() const  { return m_value; }public slots :void setvalue(int value);signals:void valueChanged(int newvalue);private:int m_value;
};
/*********************************************************/
#endif // MYSIGSLOT_H

源文件 mySigSlot:

#include "mysigslot.h"mySigSlot::mySigSlot(QWidget *parent): QWidget(parent)
{ui.setupUi(this);lbl = new QLabel("",this);lbl->setGeometry(10, 10, 100, 40);SignalSlot s1, s2;QObject::connect(&s1, SIGNAL(valueChanged(int)),&s2, SLOT(setvalue(int)));s1.setvalue(100);lbl->setText(QString("%1").arg(s2.value()));
}
mySigSlot::~mySigSlot()
{
}void SignalSlot::setvalue(int value)
{m_value = value; //assignment//为了发送信号 使用关键字emitemit valueChanged(m_value); //emit signal
}

实现结果:

信号与槽的流通过程:

首先定义原则“s1 的 valueChanged()函数被触发,那么s2将被赋予与s1相同的值”。先对s1赋值,该过程激发了信号函数s1.valueChanged(),从而相应“信号-槽”管道,s2.value()获得新值。最后显示在QLabel控件上。

4.参考资料

[1]. 金大 [zhen. Qt 5开发实战[M]. 人民邮电出版社, 2015.

Qt修炼手册4_信号与槽相关推荐

  1. Qt编程中的信号和槽机制

    Qt编程中的信号和槽机制 在使用自定义类创建一个按钮之后,只能看到一个按钮的图形,但是使用鼠标点击并无任何反应,下面想要实现一个"点击按钮可以关闭窗口"的功能. 关闭窗口的功能可以 ...

  2. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

  3. Qt多线程中的信号与槽

    文章目录 1 多线程中的信号与槽 2 对象的依附性 2.1 对象的依附性 2.2 开启线程事件循环 2.3 线程事件循环的结束 2.4 设计实例 3 信号与槽的连接方式 3.1 Qt::DirectC ...

  4. Qt修炼手册11_多线程编程和QThread类

    1.事件循环 学习QT多线程编程之前,有必要先熟悉事件循环的概念. 先看一个单线程界面程序的主函数代码: int main(int argc, char* argv[]) {QApplication ...

  5. Qt修炼手册9_Ui名字空间及setupUi()原理解读

    1.前言 用最新的QtCreator选择GUI的应用会产生含有如下文件的工程: 1.1 *.pro文件 QT += core gui //使用Qt的Core和Gui模块.QT将自己的库函数分为多个模块 ...

  6. QT对象树、信号和槽机制

    文章目录 一 .对象树是什么? 二.信号和槽的基本概念 2.1 信号 2.2 槽 2.3 松散耦合 2.4 特点 三.示例 总结 一 .对象树是什么? 对象树是由父类和若干子类对象组成,而子类也可以由 ...

  7. Qt线程间通信-信号与槽通信

    线程间通信: 1.自定义事件:postEvent(): 2.信号与槽[本质也是通过自定义事件实现的] 注意:每个线程都有自己的事件循环 下面先说明下信号与槽的通信: 下面这个程序的运行截图 模拟下载! ...

  8. Qt工作笔记-使用信号与槽让两个界面进行数据通信

    今天在项目中,发现有一个十分重要的功能,就是2个界面进行数据通信. 记得1年多前,刚刚学习Qt,对这个无法理解,然后经过一年多的学习和理解,在此把自己学习的感悟和知识在此总结下. 下面是使用emit ...

  9. QT学习小结之信号与槽

    信号与槽函数是我们学习QT必备的基础知识,今天跟大家分享我学习QT的一些总结吧. 信号槽机制是Qt编程的基础.通过信号槽,能够使Qt各组件在不知道对方的情形下能够相互通讯. 槽函数和普通的C++成员函 ...

最新文章

  1. MonoCon:使用辅助学习的单目3D目标检测框架(AAAI 2022)
  2. Linux驱动程序中的file,inode,file_operations三大结构体
  3. 支付宝开放平台开发助手_支付宝:如何创建和接入支付宝电脑网站支付-新手必备...
  4. 【论文写作】客户端设计与实现中各模块设计如何写
  5. Kafka对Java程序员有多重要?连阿里都在用它处理亿万级数据统计
  6. android ttc字体,android从ttc字体设置默认字体和字体系列
  7. 自检、开机故障及主板厂商资料
  8. 报错:【pip Error】ERROR: Cannot determine archive format of C:\Users\YDD\AppData\Local\Temp\pip-req-buil
  9. win7系统中安装破解版Charles教程 基本使用方法汇总
  10. linux每日命令(3):ln命令
  11. 网钛CMS采集插件-无需登陆自动采集发布插件
  12. 【vim环境配置】详细实录
  13. 写博客的2年,我有12万+粉丝了,还上了百度百科!
  14. oracle自学OCA,上海学习oracle OCA
  15. 2018TLC大会精彩回顾
  16. php让浏览器全屏,js实现各浏览器全屏代码
  17. 机器学习基石2-Learning to Answer Yes-No
  18. pytorch--切断梯度的方法
  19. 超神学院的宇宙天体计算机,正文 第一章:银河之力被一分为二
  20. java 删除oss 文件

热门文章

  1. 利用Inotify和Rsync将webproject文件自己主动同步到多台应用server
  2. android 汉字转拼音pinyin4j包
  3. 关于在linux下搭建VSFTP下匿名不能上传的问题
  4. 语言特性与API设计
  5. 企业级UML/MDA工具Trufun 2007系列发布!
  6. hud-1495--非常可乐 VS nyoj-21--三个水杯
  7. NYOJ 70 阶乘因式分解(二)
  8. python爬虫---实现项目(二) 分析Ajax请求抓取数据
  9. 练习:利用函数实现一个登陆系统
  10. 轻松自动化---selenium-webdriver(python) (十二)