Qt信号槽

目录

1、信号的定义

2、槽定义

3、信号和槽连接

4、信号与槽断开连接

5、伪代码展示

6、注意


Qt中的信号(signals)和槽(slots)是一种用于实现对象间通信的机制,广泛用于Qt应用程序中,特别是在图形用户界面(GUI)开发中。信号和槽机制允许对象之间以松散耦合的方式进行通信,使代码更加模块化和可维护。在代码写法的角度,则使代码最大程度的解耦。

1、信号的定义

在类内使用 signals:进行定义

signals:
    void testFun(QString& str); //信号不能也无需实现

信号发射,使用关键字emit

void fun(){
    QString str="就是这个感觉";
    emit testFun(str);       
}

2、槽定义

使用 访问修饰符+ slots:进行定义

private slots:
    void testFun1(QString& str);
    void testFun2();
    void testFun3();

3、信号和槽连接

使用connect进行连接

QMetaObject::Connection QObject::connect(
const QObject *sender, //信号发送者
const char *signal, //发送的信号
const QObject *receiver, //信号接收者
const char *method, //表示与信号连接的方式的字符串,可以是槽或信号
Qt::ConnectionType type = Qt::AutoConnection //连接方式,默认自动连接
 
)

 常见写法:

1、connect(this, SIGNAL(selectedModelType->sendData()), this, SLOT(receireData()));

Qt信号槽_第1张图片

信号和槽的连接方式

Qt::AutoConnection:(默认连接方式)自动方式,由系统自动选择连接方式。
Qt::DirectConnection:直接方式,信号发射时,立即调用槽。
Qt::QueuedConnection:队列方式,信号发射时产生一个事件进入队列,事件被处理时槽才能调用。
Qt::BlockQueuedConnection:阻塞队列方式,信号发射时产生一个事件进入队列,然后当前线程进入阻塞状态,直到事件处理完毕,若接收方位于发送信号的线程中,则程序会死锁,故此连接方式仅用于多线程。


4、信号与槽断开连接

QObject::disconnect(
    const QObject* sender,
    const char* signal,
    const QObject *receiver,
    const char* method
);

5、伪代码展示

// 定义一个发送信号的类
class MySender : public QObject {
    Q_OBJECT
public:
    MySender() {}
signals:
    void mySignal(int value);
};

// 定义一个接收信号的类
class MyReceiver : public QObject {
    Q_OBJECT
public slots:
    void mySlot(int value) {
        qDebug() << "Received value: " << value;
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    MySender sender;
    MyReceiver receiver;

    // 建立信号和槽的连接
    QObject::connect(&sender, SIGNAL(mySignal(int)), &receiver, SLOT(mySlot(int)));

    // 发射信号,将触发槽函数
    emit sender.mySignal(42);

    return app.exec();
}

6、注意

  1. 信号与槽机制是类型安全的,相关联的信号与槽参数必须匹配
  2. 信号与槽是松耦合的,信号发送者不知道也不需知道接受者的信息。
  3. 信号与槽可以使用任意类型的任意数量的参数。
  4. 信号与槽可以一对一、一对多、多对一进行连接。

你可能感兴趣的:(c++,qt,c++)