其简单。请看下面的例子。
如果你想写信号在自己的类&插槽,需要满足两个条件......
1. Your class must inherit from QObject class or any class derived from QObject.
2. The Q_OBJECT macro must appear in a private section in your class.
/* Sender.h */
#ifndef SENDER_H
#define SENDER_H
#include <QObject>
class Sender : public QObject
{
Q_OBJECT
public:
explicit Sender(QObject *parent = 0);
void fireSignal();
signals:
void foo(const QString& arg);
};
#endif // SENDER_H
/* Sender.cpp*/
#include "Sender.h"
Sender::Sender(QObject *parent) :
QObject(parent)
{
}
void Sender::fireSignal()
{
emit foo("This a message sender is sending to receiver.");
}
以下
现在接收器的代码
/* Receiver.h */
#ifndef RECEIVER_H
#define RECEIVER_H
#include <QObject>
class Receiver : public QObject
{
Q_OBJECT
public:
explicit Receiver(QObject *parent = 0);
public slots:
void bar(const QString& arg);
};
#endif // RECEIVER_H
/* Receiver.cpp */
#include "Receiver.h"
#include <iostream>
Receiver::Receiver(QObject *parent) :
QObject(parent)
{
}
void Receiver::bar(const QString &arg)
{
std::cout << arg.toStdString();
}
现在的main.cpp代码
#include <QtCore/QCoreApplication>
#include "Sender.h"
#include "Receiver.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Sender sender;
Receiver receiver;
QObject::connect(&sender, SIGNAL(foo(QString)), &receiver, SLOT(bar(QString)));
sender.fireSignal();
return a.exec();
}
就是这样。
最后如果你想使用另一种连接方法的语法。请使用下面的线
QObject::connect(&sender,&Sender::foo,&receiver,&Receiver::bar);
希望这对你有所帮助。 谢谢
你能提供一些代码吗?我不能完全理解你想说的话 – alegen
不,你只需要建立连接一次。请发布一些你的代码。 – Ammar
这是非常复杂的代码,所以我会发布一些伪代码来更好地解释这个问题 –