connect
函数的第四个参数可传递信号,作为连接源。代码如下:
// View.h
class View : public QWidget {
Q_OBJECT
public:
explicit View(QWidget *parent = nullptr);
signals:
void buttonClicked();
private:
QPushButton *button;
};
// View.cpp
View::View(QWidget *parent) : QWidget(parent) {
button = new QPushButton("Click me", this);
connect(button, &QPushButton::clicked, this, &View::buttonClicked);
}
// Presenter.h
class Presenter : public QObject {
Q_OBJECT
public:
explicit Presenter(View *view);
private slots:
void handleButtonClicked();
private:
View *view;
};
// Presenter.cpp
Presenter::Presenter(View *view) : QObject(nullptr), view(view) {
connect(view, &View::buttonClicked, this, &Presenter::handleButtonClicked);
}
void Presenter::handleButtonClicked() {
// 处理按钮点击事件的逻辑
}
在上面的示例中,View 类中定义了一个名为 buttonClicked
的信号,并在构造函数中将按钮的 clicked
信号连接到这个信号。Presenter 类中通过连接 View 的信号 buttonClicked
到自己的槽函数 handleButtonClicked
来处理按钮点击事件。
通过这种方式,View 和 Presenter 可以实现解耦,各自专注于自己的职责。View 负责用户界面的展示和用户交互,Presenter 负责处理业务逻辑。信号槽机制使得二者之间的通信变得简单和灵活。