重载信号与槽
1. 添加信号声明
class Sender : public QObject
{
Q_OBJECT
public:
explicit Sender(QObject *parent = nullptr);
signals:
void sendSignal();
void sendSignal(QString message);
};
2. 添加槽声明
class Sendee : public QObject
{
Q_OBJECT
public:
explicit Sendee(QObject *parent = nullptr);
signals:
public slots:
void receiveSignal();
void receiveSignal(QString message);
};
3. 实现重载槽函数
void Sendee::receiveSignal(QString message) {
qDebug()<<"We have received the signal.The message is"<<message;
}
添加函数指针
因为重载了信号函数与槽函数,原先的连接函数存在歧义;故而需要添加函数指针指明待连接的信号函数与槽函数,以消除歧义
#include <QPushButton>
#include "sendee.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QPushButton *btn = new QPushButton("发送", this);
connect(btn, &QPushButton::clicked, this, &Widget::emitSignal);
sder = new Sender();
Sendee* sdee = new Sendee();
void (Sender::*send)(QString) = &Sender::sendSignal;
void (Sendee::*receive)(QString) = &Sendee::receiveSignal;
connect(sder, send, sdee, receive);
}
void Widget::emitSignal() {
emit sder->sendSignal("Hello, world of QT!");
}
简便版:
#include <QPushButton>
#include "sendee.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QPushButton *btn = new QPushButton("发送", this);
connect(btn, &QPushButton::clicked, this, &Widget::emitSignal);
sder = new Sender();
Sendee* sdee = new Sendee();
connect(
sder,
qOverload<QString>(&Sender::sendSignal),
sdee,
qOverload<QString>(&Sendee::receiveSignal)
);
}
void Widget::emitSignal() {
emit sder->sendSignal("Hello, world of QT!");
}
实现效果

973

被折叠的 条评论
为什么被折叠?



