在 Linux 下,C++ 使用信号与槽机制主要依赖于 Qt 框架。信号与槽(signals and slots)是 Qt 的核心特性之一,用于实现对象间的通信。信号是在某个特定事件发生时发出的,而槽是响应信号的函数。当信号被发出时,与之关联的槽会被自动调用。
以下是一个简单的示例,展示了如何在 C++ 中使用信号与槽机制:
首先,确保已经安装了 Qt 开发环境。可以从 Qt 官网(https://www.qt.io/download)下载并安装。
创建一个新的 Qt Widgets 应用程序项目。可以使用 Qt Creator IDE 或者命令行工具 qmake。
在项目中创建两个类,一个作为信号发射器(例如 MySignalEmitter
),另一个作为信号接收器(例如 MySignalReceiver
)。这两个类都需要继承自 QObject
。
在 MySignalEmitter
类中定义一个信号,例如 mySignal()
。在 MySignalReceiver
类中定义一个槽,例如 mySlot()
。
在 MySignalEmitter
类中,使用 Q_OBJECT
宏标记类,并使用 signals:
关键字声明信号。在 MySignalReceiver
类中,同样使用 Q_OBJECT
宏标记类,并使用 public slots:
关键字声明槽。
在 MySignalEmitter
类的构造函数中,创建一个 MySignalReceiver
对象,并使用 connect()
函数将信号与槽连接起来。
在需要发出信号的地方,调用 emit
关键字。
下面是一个简单的代码示例:
// mysignalemitter.h
#include <QObject>
class MySignalEmitter : public QObject {
Q_OBJECT
public:
explicit MySignalEmitter(QObject *parent = nullptr);
signals:
void mySignal();
};
// mysignalreceiver.h
#include <QObject>
class MySignalReceiver : public QObject {
Q_OBJECT
public:
explicit MySignalReceiver(QObject *parent = nullptr);
public slots:
void mySlot();
};
// mysignalemitter.cpp
#include "mysignalemitter.h"
#include "mysignalreceiver.h"
MySignalEmitter::MySignalEmitter(QObject *parent) : QObject(parent) {}
// mysignalreceiver.cpp
#include "mysignalreceiver.h"
#include <QDebug>
MySignalReceiver::MySignalReceiver(QObject *parent) : QObject(parent) {}
void MySignalReceiver::mySlot() {
qDebug() << "Slot called!";
}
// main.cpp
#include <QCoreApplication>
#include "mysignalemitter.h"
#include "mysignalreceiver.h"
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
MySignalEmitter emitter;
MySignalReceiver receiver;
QObject::connect(&emitter, &MySignalEmitter::mySignal, &receiver, &MySignalReceiver::mySlot);
emit emitter.mySignal();
return app.exec();
}
编译并运行此示例,当信号 mySignal()
被发出时,槽 mySlot()
将被调用,控制台将输出 “Slot called!”。