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

【Qt秘籍】[008]-Qt中的connect函数

        在Qt框架中,connect函数是一个非常核心的函数,用于实现信号(Signals)和槽(Slots)之间的连接,它是Qt信号槽机制的关键所在。信号槽机制是一种高级的通信方式,允许对象在状态改变时通知其他对象,而无需知道这些对象是谁。这种方式促进了对象之间的松耦合,增强了代码的模块化和可维护性。

【Qt知识】Qt框架中的信号(Signals)与槽(Slots)机制-CSDN博客

connect() 函数原型

static bool connect(const QObject *sender, 
const char *signal, 
const QObject *receiver, 
const char *method, 
Qt::ConnectionType type = Qt::AutoConnection);
  • 参数说明

    • sender:指向发出信号对象的指针。
    • signal:指向信号函数的C字符串(信号函数)。
    • receiver:指向接收信号对象的指针。
    • method:指向槽函数或接受者可以调用的普通函数的C字符串(旧式语法)。
    • type:连接的类型,默认为Qt::AutoConnection。

 连接类型

从Qt 5开始,connect还可以指定连接的类型,决定了信号和槽的调用方式:

  • Qt::AutoConnection(默认):自动选择最佳的连接类型。
  • Qt::DirectConnection:信号被发出后,槽函数立即在发出信号的线程中执行。
  • Qt::QueuedConnection:槽函数在接收者所在线程的事件循环中排队等待执行,适用于不同线程间的通信。
  • Qt::BlockingQueuedConnection:类似于Qt::QueuedConnection,但会阻塞发出信号的线程,直到槽函数执行完毕。
  • Qt::UniqueConnection:如果连接已经存在,则不建立新的连接。

Lambda表达式作为槽函数

从Qt 5.10起,你还可以使用lambda表达式作为槽函数,进一步增加了灵活性

QObject::connect(button, &QPushButton::clicked, this, [](){qDebug() << "Button clicked!";
});

 

代码示例:关闭窗口按钮

功能:在窗口中设置一个按钮,并在单击该按钮时将其关闭。

//widget.cpp#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* button = new QPushButton(this);button->setText("close");button->move(300,300);connect(button,&QPushButton::clicked,this,&QWidget::close);
}Widget::~Widget()
{delete ui;
}

运行代码 

点击按钮后窗口自动消失。

 

相关文章:

  • 【LeetCode:575. 分糖果+ 哈希表】
  • LNMP网站架构部署
  • SDL教程(二)——Qt+SDL播放器
  • 深度学习优化算法比较
  • Tailwindcss Flex 布局相关的样式类及其实战案例
  • Vue3 双向绑定
  • 【Qt】【模型视图架构】代理模型
  • 文件上传之使用一个属性接收多个文件
  • Python课设-学生信息管理系统
  • 申请高德地图API的Key并加以接口调用的方法
  • 深入分析 Android Service (完)
  • WordPress plugin MStore API SQL注入漏洞复现(CVE-2023-3077)
  • axios七大特性
  • Golang 协程和 Channel 的协同工作
  • Facebook开户 | Facebook二不限户
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【Linux系统编程】快速查找errno错误码信息
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Flex布局到底解决了什么问题
  • Git初体验
  • iOS小技巧之UIImagePickerController实现头像选择
  • java2019面试题北京
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • js中的正则表达式入门
  • leetcode-27. Remove Element
  • maya建模与骨骼动画快速实现人工鱼
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • python docx文档转html页面
  • React中的“虫洞”——Context
  • React组件设计模式(一)
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • TypeScript实现数据结构(一)栈,队列,链表
  • 从输入URL到页面加载发生了什么
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 利用jquery编写加法运算验证码
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 一个JAVA程序员成长之路分享
  • 进程与线程(三)——进程/线程间通信
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (汇总)os模块以及shutil模块对文件的操作
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)jQuery 基础