本文共 2092 字,大约阅读时间需要 6 分钟。
在UI界面中,右击控件并选择“转到槽”以手动关联信号和槽。
自定义信号:可以有参数,可以重载,需声明(不用实现),返回void
,写到signals
下。
class sj : public QObject {Q_OBJECTpublic:explicit sj(QObject *parent = nullptr);signals:void issj();void issj(QString i); // 带参数的信号};
自定义槽:可以有参数,可以重载,需声明并实现,返回void
,写到public slot
下或public
或全局函数下。
class me : public QObject {Q_OBJECTpublic:explicit me(QObject *parent = nullptr);public slots:void happy();void happy(QString j); // 带参数的槽};
connect
函数方式一:
connect(signal_sender, SIGNAL(signal_name), receiver_object, SLOT(slot_function_name));
connect(qPushButton, QPushButton::clicked, this, QWidget::close);
方式二:
connect(qPushButton, QPushButton::clicked, this, WPARAM::close);
connect(sj_obj, sj::issj, me_obj, me::happy);
信号和槽可重载。
例如:
class sj {public:void issj() {};void issj(QString i) {};};
class me {public:void happy() {};void happy(QString j) {};};
connect(sj_obj, sj::issj, me_obj, me::happy);
connect
结合lambda
函数:connect(sj_obj, sj::issj, me_obj, [=]() { me_obj->happy(); });
connect(button, QPushButton::pressed, slot1, slot_function);connect(button, QPushButton::pressed, slot2, slot_function);
connect(button1, QPushButton::pressed, receiver, receiver_function);connect(button2, QPushButton::pressed, receiver, receiver_function);
disconnect
函数断开特定连接。 disconnect(button, QPushButton::pressed, slot1, slot_function);
信号参数与槽参数一一对应。
connect(sender, signal_name, receiver, slot_function, Qt::AutoConnection);
示例代码中路径处理:
#include#include "me.h"using namespace std;me::me(QObject *parent) : QObject(parent) {}void me::happy() { qDebug() << "开心";}void me::happy(QString j) { qDebug() << "开心" << j;}
connect(s, sj::issj, m, me::happy);emit s->issj();
通过以上方法,可以根据不同需求灵活配置信号和槽的连接方式,充分发挥Qt的多功能性。
转载地址:http://zeeiz.baihongyu.com/