一.标准信号与槽函数

有些信号和槽的函数模板都已经被写好了,只需要调用即可

下面是一个点击按钮关闭窗口的程序

.h文件

#ifndef MYWIDGET_H
#define MYWIDGET_H#include <QWidget>
#include <QPushButton>class MyWidget : public QWidget
{Q_OBJECT    //使用信号与槽的时候需要用到它public:MyWidget(QWidget *parent = 0);~MyWidget();public:QPushButton* pBtn1;};#endif // MYWIDGET_H

.cpp文件

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{pBtn1 = new QPushButton(this); //指定父对象,不然按钮在窗口上是无法正常显示的pBtn1->setText("Close");//创建一个关闭窗口的按钮pBtn1->move(100,100);   //更改按钮在窗口上的位置//标准信号与槽函数的使用connect(pBtn1, &QPushButton::pressed, this, &MyWidget::close);/*pBtn1:信号发出者,为指针类型*&QPushButton::pressed 信号函数;  &发送者的类名:信号名字*this:信号的接收者*&Widget::close 槽函数,信号处理函数; &接受的类名::槽函数名称*/}MyWidget::~MyWidget()
{}

二.自定义槽函数

.h文件

#ifndef MYWIDGET_H
#define MYWIDGET_H#include <QWidget>
#include <QPushButton>class MyWidget : public QWidget
{Q_OBJECT    //使用信号与槽的时候需要用到它public:MyWidget(QWidget *parent = 0);~MyWidget();public:QPushButton* pBtn1;public://自定义的槽函数void mySlot();};#endif // MYWIDGET_H

.cpp文件

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{pBtn1 = new QPushButton(this); //指定父对象,不然按钮在窗口上是无法正常显示的pBtn1->setText("Close");//创建一个关闭窗口的按钮pBtn1->move(100,100);   //更改按钮在窗口上的位置
connect(pBtn1, &QPushButton::pressed, this, mySlot);/*自定义槽函数:* QT5:任意的成员函数,普通的全局函数,静态函数* 由于信号函数是没有返回值的,所以槽函数一定也没有返回值* 一般在QT5中都是使用成员函数作为槽函数*/
}//成员函数
void MyWidget::mySlot()
{this->close();
}MyWidget::~MyWidget()
{}

三.自定义信号与槽函数

下面是一个两个窗口相互切换的程序,点击主窗口按钮,切换到子窗口;在子窗口中点击按钮,给主窗口发送自定义信号。

mainwidget.h文件

#ifndef MAINWIDGET_H
#define MAINWIDGET_H#include <QWidget>
#include <QPushButton>
#include "subwidget.h"class MainWidget : public QWidget
{Q_OBJECTpublic:MainWidget(QWidget *parent = 0);~MainWidget();public:QPushButton* pBtn1;SubWidget subWidget;public:void ShowSubWidget();void DealSub();void DealSubWin(int, QString);};#endif // MAINWIDGET_H

mainwidget.cpp文件

#include "mainwidget.h"
#include <QDebug>MainWidget::MainWidget(QWidget *parent): QWidget(parent)
{this->setWindowTitle("主窗口");pBtn1 = new QPushButton("切换到子窗口", this);pBtn1->move(100, 100);//点击按钮,显示子窗口connect(pBtn1, &QPushButton::pressed, this, ShowSubWidget);//处理子窗口发送的信号//不带参数的信号void(SubWidget::*funSignal)() = &SubWidget::mySignal;connect(&subWidget, funSignal, this, DealSub);//带有参数的信号void(SubWidget::*TestSignal)(int, QString) = &SubWidget::mySignal;connect(&subWidget, TestSignal, this, DealSubWin);}MainWidget::~MainWidget()
{}void MainWidget::ShowSubWidget()
{subWidget.show();
}void MainWidget::DealSub()
{subWidget.hide();this->show();
}void MainWidget::DealSubWin(int a, QString str)
{qDebug() << a;qDebug() << str.toUtf8().data();
}

subwidget.h文件

#ifndef SUBWIDGET_H
#define SUBWIDGET_H#include <QWidget>
#include <QPushButton>class SubWidget : public QWidget
{Q_OBJECT
public:explicit SubWidget(QWidget *parent = 0);signals://自定义信号/*信号没有返回值,但可以有参数* 信号就是函数的声明,只需要声明,无需定义* 使用emit mySignal* 信号可以重载*/void mySignal(); //无参数的信号void mySignal(int, QString); //有参数的信号public slots:public:QPushButton* pBtn;public://自定义槽函数void sendSlot();};#endif // SUBWIDGET_H

subwidget.cpp文件

#include "subwidget.h"SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{this->setWindowTitle("子窗口");pBtn = new QPushButton("切换到主窗口", this);pBtn->move(100, 100);connect(pBtn, &QPushButton::clicked, this, sendSlot);
}void SubWidget::sendSlot()
{//当按钮按下时,子窗口向主窗口发送信号
    emit mySignal();emit mySignal(100, "我是子窗口");
}

转载于:https://www.cnblogs.com/QingYiShouJiuRen/p/11442060.html

QT中信号与槽的常见使用相关推荐

  1. 【Qt专栏】Qt 中信号与槽的概念和实现机制

    目录 一,信号和槽概念 1.元对象系统 2.信号和槽 3.底层实现机制 二,什么是观察者设计模式 三,观察者设计模式的编程套路 四,纯 C++ 实现信号与槽机制 1.槽函数模板类 2.信号模板类 3. ...

  2. 【Qt】Qt中信号与槽

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

  3. QT中信号和槽的简单解释

    代码见: https://blog.csdn.net/cloud323/article/details/82192241 思想介绍为: 一.信号 当对象的内部状态发生改变,信号就被发射.只有定义了一个 ...

  4. qt槽函数如何传递多个参数_【Qt】信号和槽对值传递参数和引用传递参数的总结...

    在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...

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

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

  6. Qt Designer信号和槽

    2019独角兽企业重金招聘Python工程师标准>>> 先入一些信号槽的基本介绍: 信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包 ...

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

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

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

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

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

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

最新文章

  1. 转投AI?英国这所大学决定裁掉数学系,激怒了菲尔兹奖得主
  2. 【Android】显示Emoji表情字符
  3. linux内核中链表代码分析---list.h头文件分析(二)【转】
  4. 【每日一题】4月6日数码
  5. 痛失大家!中国科学院院士陈家镛逝世
  6. 第8篇:Flowable-Modeler集成之Flowable-modeler源码编译
  7. android 继承listview,Android listView 继承ListActivity的用法
  8. Framework Ventures联合创始人:未来两年DeFi TVL将提升10倍
  9. 一个简单的 SQLite 的示例
  10. JavaScript之爆肝汇总【万字长文❤值得收藏】
  11. 为什么不使用Go语言呢?
  12. android手势解锁代码,纯android代码实现九宫格手势密码
  13. jmeter进行http压力测试
  14. java 假币问题_假币问题-题解(Java代码)
  15. 光标右侧小圆圈一直闪,输入法一直不停中英文切换
  16. 回首向来萧瑟处 也无风雨也无晴
  17. (附源码)SSM学生网上请假系统JAVA计算机毕业设计项目
  18. Ionic4—UI组件之ion-backdrop组件
  19. Bootstrap3基础 btn-primary/warning... 三类按钮的六种样式
  20. [NWERC 2019] E. Expeditious Cubing 浮点数精度判断

热门文章

  1. 从JSON示例数据生成Web应用程序代码
  2. 在Android上可视化TensorFlow Lite AI结果
  3. 在Logstash中配置多个管道
  4. Redis:复制,第2部分——主从复制和Redis哨兵
  5. js 滚动条自动滚动到最底部
  6. kettle清洗mysql数据_ETL工具Kettle使用以及与Java整合实现数据清洗
  7. mysql 远程安装linux命令,Linux mysql命令安装允许远程连接的安装设置方法
  8. python为什么用class_python为什么会有@classmethod?
  9. Value of key '' is not a string! Cannot translate the value of keypath ''. Use the v
  10. java executor 异步_Java并发编程11-异步执行框架Executor