【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;
}

运行代码

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

相关推荐
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz9 天前
QML Hello World 入门示例
qt
xcyxiner12 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner12 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner13 天前
DicomViewer (添加模型类)3
qt
xcyxiner13 天前
DicomViewer (目录调整) 2
qt
xcyxiner13 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00615 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术15 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript