当前位置: 首页 > article >正文

Qt_信号槽机制

文章目录

  • 一、 Qt中的信号槽机制
    • 1.在widget.h添加处理函数的声明
    • 2.添加处理函数的定义
    • 3.建立信号和槽的连接
    • 4.运行
  • 二、自定义信号
    • 1.自定义信号
    • 2.连接信号和槽函数
    • 3.发送信号


一、 Qt中的信号槽机制

本质就是给按钮的点击操作,关联上一个处理函数,当用户点击的时候,就会执行这个处理函数。

函数:
    static QMetaObject::Connection connect(
    const QObject *sender,
    const QMetaMethod &signal,
    const QObject *receiver, 
    const QMetaMethod &method,
    Qt::ConnectionType type = Qt::AutoConnection);
作用:
	Qt中的connect是QObject这个类提供的的静态函数,这个函数的作用就是“连接信号”和“槽”
参数:
	sender:信号发出的对象,样例:ui->控件的objectName
	signal:发出的信号名称,以字符串形式给出。样例:&QPushButton::clicked
	receiver:信号接收的对象,即槽函数所在的对象。
	method:接收信号时调用的槽函数名称,以字符串形式给出。

注:
如何访问组件对象,一般通过ui->objectName来访问。
在这里插入图片描述

ui->pushButton 通过这种方式就能访问到对应的组件
如果是用代码创建组件,可以直接用对象名

1.在widget.h添加处理函数的声明

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void handleClick();//添加的
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

注:
在声明函数处,按下alt+回车,快速定义
在这里插入图片描述

2.添加处理函数的定义

void Widget::handleClick()
{
    //当按钮被点击之后,就把按钮中的文本进行切换
    ui->pushButton->setText("hello world");
}

3.建立信号和槽的连接

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::handleClick);//建立连接
}

4.运行

按下前:
在这里插入图片描述
按下后:
在这里插入图片描述

二、自定义信号

信号是一类非常特殊的函数

  • 程序员只要写出函数声明,并且告诉Qt,这是一个"信号"即可,这个函数的定义,是Qt在编译过程中,自动生成的。(自动生成的过程,程序员无法干预)
  • 作为信号函数,这个函数的返回值,必须是void,有没有参数都可以,甚至也可以支持重载

1.自定义信号

//wi
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void handleMySignal();
signals:
    void mySignal();//自定义的信号
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

2.连接信号和槽函数

connect(this,&Widget::mySignal,this,&Widget:: handleMySignal);

3.发送信号

发送信号中,使用的关键字:emit

emit mySignal();//运行这个代码就发送mySignal的信号 

http://www.kler.cn/a/284858.html

相关文章:

  • 在Java中使用ModelMapper简化Shapefile属性转JavaBean实战
  • Electron 项目启动外部可执行文件的几种方式
  • 网站小程序app怎么查有没有备案?
  • 【网络工程】计算机硬件概述
  • 深入理解接口测试:实用指南与最佳实践5.0(二)
  • mysql5.7安装SSL报错解决(2),总结
  • 计算机网络概述(网络结构)
  • MYSQL——聚合查询
  • B树及其Java实现详解
  • 续:MySQL的半同步模式
  • APO 新发版支持Skywalking Agent接入
  • unity的问题记录(信息管理)
  • 【Java设计模式】责任链模式:构建强大的请求处理机制
  • 技术成神之路:设计模式(十二)模板方法模式
  • SQL存储过程:数据库编程的瑞士军刀
  • Java中的注解(Annotation)
  • 谷粒商城实战笔记-269~271-商城业务-订单服务-bug修改
  • Python3遍历文件夹下的文件
  • AI编码新时代:免费人工智能助手Blackbox AI
  • Spring Boot 集成 JdbcTemplate(盘它!)
  • 使用WSL在Windows上安装Linux
  • 【微信小程序】SpringBoot集成微信小程序(多小程序集成)
  • opencv/c++的一些简单的操作(入门)
  • 趣味算法------多重背包问题
  • 【拉取Git项目到本地,知识小记,后续再改】
  • EmguCV学习笔记 VB.Net 8.1 漫水填充法 floodFill