其簡單。請看下面的例子。
如果你想寫信號在自己的類&插槽,需要滿足兩個條件......
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
這是非常複雜的代碼,所以我會發布一些僞代碼來更好地解釋這個問題 –