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

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

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

connect() 函数原型

cpp 复制代码
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!";
});

代码示例:关闭窗口按钮

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

cpp 复制代码
//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;
}

运行代码

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

相关推荐
aaPIXa6223 小时前
C++ TensorRT Edge-LLM 边缘推理框架:从原理到实战
开发语言·c++·edge
阿pin3 小时前
Java随笔-GC收集器工作机制
java·开发语言·jvm·gc
2601_962440843 小时前
计算机毕业设计之jsp旅游网站管理系统
java·开发语言·算法·课程设计·旅游·推荐算法
默默敲代码的徐哥儿3 小时前
八股文整理——后端
java·开发语言·spring boot·后端·学习
matlab代码4 小时前
基于matlab人脸门禁识别系统(可增加其它人脸图像)源码40期】
开发语言·matlab·人脸识别·人脸门禁
李少兄4 小时前
Java CompletableFuture 解析(含常见面试题)
java·开发语言
逝水无殇4 小时前
C# 枚举(Enum)详解
开发语言·后端·c#
nianniannnn5 小时前
c++复习自存--标准模板库STL
开发语言·c++·windows
努力努力再努力wz5 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
什巳5 小时前
JAVA练习275-乘积最大子数组
java·开发语言·数据结构·算法