最近项目中使用到QT,在此记录一下QT的核心,信号与槽:

QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

sender:信号发出者

signal:发送信号

receiver:信号接收者

method:信号处理者

新建一个QT窗口,在窗口上放一个按钮,点击按钮然后关闭窗口

SignalAndSlot.h

#include <QtWidgets/QWidget>
#include "ui_SignalAndSlot.h"
#include <QPushButton> class SignalAndSlot : public QWidget
{
Q_OBJECT public:
SignalAndSlot(QWidget *parent = Q_NULLPTR); private:
QPushButton b1; private:
Ui::SignalAndSlotClass ui;
};

SignalAndSlot.cpp

#include "SignalAndSlot.h"

SignalAndSlot::SignalAndSlot(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this); b1.setParent(this);
b1.setText(QStringLiteral("关闭"));//QStringLiteral解决VS中文乱码
b1.move(, ); connect(&b1, &QPushButton::released, this, &SignalAndSlot::close);
}

一. 槽函数:

QT5:任意的成员函数,普通全局函数,静态函数
     槽函数需要和信号一致(参数,返回值)
     由于信号没有返回值,所以槽函数一定没有返回值

我们自定义槽函数
void closeWidget(); //自定义槽函数
//槽函数里执行关闭操作
void SignalAndSlot::closeWidget()
{
close();
} ..... connect(&b1, &QPushButton::released, this, &SignalAndSlot::closeWidget);//自定义槽函数

二.自定义信号实例

我们实现两个窗口互相切换,在主创中新建一个按钮,叫切换到子窗口(这个过程是子窗口显示,主窗口隐藏), 新建一个QT子窗口,子窗口上有一个按钮叫切换到主窗口(子窗口隐藏,主窗口显示);

1.新建子窗口

2.在主窗口中定义SubWidget窗口成员变量和主窗口的切换函数

这样实现,就可以从主窗口切换到子窗口。

3.从子窗口切换到主窗口

在子窗口定义信号和发送信号的槽函数

SubWidget.h

#include <QWidget>
#include "ui_SubWidget.h" class SubWidget : public QWidget
{
Q_OBJECT public:
SubWidget(QWidget *parent = Q_NULLPTR);
~SubWidget(); signals:
/*
* 信号必须有signals 关键字来声明
* 信号没有返回值,但可以有参数
* 信号就是函数声明,只需声明,无须实现
* 使用:emit mysignal();
* 信号可以重载
*/
void MySignal(); public:
void SendSignal();//发送信号的槽 private:
Ui::SubWidget ui;
};

SubWidget.cpp

#include "SubWidget.h"
#include <QPushButton> SubWidget::SubWidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this); QPushButton* pChange = new QPushButton(this);
pChange->setText(QStringLiteral("切换到主窗口"));
pChange->move(, ); connect(pChange, &QPushButton::released, this, &SubWidget::SendSignal);//点击按钮,槽函数触发一个信号 } SubWidget::~SubWidget()
{
} void SubWidget::SendSignal()
{
emit MySignal();
}

4.在主窗口里面处理这个自定义信号

....

connect(&sub, &SubWidget::MySignal, this, &SignalAndSlot::DealSubSignal);
} void SignalAndSlot::DealSubSignal()
{
show();
sub.hide();
}

效果:

QT自定义信号和槽的更多相关文章

  1. QT_5_ Qt中信号和槽 + 自定义信号和槽 + lambda 表达式

    1.Qt中信号和槽 1.1 需求:点击按钮关闭窗口 1.2 利用connect进行链接 1.3 参数1 信号发送者(指针) 参数2 发送的信号(信号地址) 参数3 信号的接受者(指针) 参数4 处理槽 ...

  2. 第15.19节 PyQt(Python+Qt)入门学习:自定义信号与槽连接

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 本文利用中介绍了PyQt中的信号和槽机制,除了使用PyQt组件的已有信号外,PyQt和Qt ...

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

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

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

    C++_之Qt的信号和槽的详解 1.概述 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal ...

  5. 【PyQt5-Qt Designer】pyqtSignal()-高级自定义信号与槽

    PyQt 5信号与槽的几种高级玩法 参考:http://www.broadview.com.cn/article/824 from PyQt5.QtCore import QObject , pyqt ...

  6. QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)

    背景: QT在用户关闭窗口(直接点击"X"键)时,程序一般都需要做一些善后的事情,就我现在的程序来说,既关闭USB.如何实现? 正文: 首先,在对应窗体的".h" ...

  7. qt中信号与槽机制

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

  8. QT 的信号与槽

    转载: QT 的信号与槽机制介绍 QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 ...

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

      信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗 ...

随机推荐

  1. SpringBoot学习<二>——SpringBoot的默认配置文件application和多环境配置

    一.SpringBoot的默认文件appliction 上一篇文章已经说明,springboot启动会内嵌tomcat,端口也是默认的8080,如果我们想要改变端口如果做呢? 在springboot项 ...

  2. python3.5如何安装statsmodels包?

    如题: 系统win10,64 python3.5 32 使用pip install statsmodels 会报错,说cpython没有安装.一直找不到解决办法,就只好去第三方库下载了一个 http: ...

  3. VS2015配置Qt5

    目录 需要准备的东西 VS2015 Qt5 VS2015 Qt插件 rc.exe无法启动 基于CMake的Qt工程 reference 需要准备的东西 Visual Studio 2015 Qt5 V ...

  4. Hexo 文章图片添加水印,不用云处理

    由于网上找到的都是借用第三方云处理添加水印,但是我不太想用,所以自己开发了一个插件 Hexo 图片添加水印Github地址 目前插件可以直接在 hexo 官网上搜索到 下面内容都是在 Github 上 ...

  5. (十)Kubernetes ConfigMap和Secret

    ConfigMap资源 介绍 ConfigMap是让配置文件从镜像中解耦,让镜像的可移植性和可复制性.许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息.这些配置信息需要与docker im ...

  6. iView学习笔记(二):Table行编辑操作

    1.前端准备工作 首先新建一个项目,然后引入iView插件,配置好router npm安装iView npm install iview --save cnpm install iview --sav ...

  7. Cookie 跨域 和 SSO

    cookie是不能跨域访问的,但是在二级域名是可以共享cookie cookie的四个可选属性: 1. cookie的生存期属性:expires; 默认情况下,cookie只在浏览器会话期存在.退出浏 ...

  8. P5022 旅行[基环树]

    以后必须学会面向数据编程!看半天题目不知道咋写直接爆搜,结果分少的可怜,还不如直接贪搞个60分. 观察数据,发现图至多存在一个环. 显然,如果没有环,这个题不跟你多bb,直接贪就完事了,线性复杂度. ...

  9. awk编程的基本用法

    awk也是用来处理文本的,awk语言可以从文件或字符串中基于指定规则浏览和抽取信息,可以实现数据查找.抽取文件中的数据.创建管道流命令等功能. awk模式匹配 第一种方法打印空白行将空白行打印出来,并 ...

  10. PWA-让前端网页媲美原生APP的用户体验

    一.背景 从2018年到现在,作为号称下一代web应用模型的PWA,逐渐成为了一个各大前端厂商争先恐后进行涉足,布局的一个新的技术, 其主要的对标物Native app,作为现在最主流的mobile端 ...