????????在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;
}
運行代碼?
點擊按鈕后窗口自動消失。
?