sender.h
#ifndef SENDER_H
#define SENDER_H
#include <QObject>
class Sender : public QObject
{
Q_OBJECT
public:
Sender();
signals:
void send_msg();
void send_msg(int x);
};
#endif // SENDER_H
receiver.h
#ifndef RECEIVER_H
#define RECEIVER_H
#include <qobject.h>
#include <stdio.h>
#include <iostream>
class Receiver : public QObject
{
Q_OBJECT
public:
Receiver();
public slots:
void receive_msg()
{
std::cout << "received msg without parameters" << std::endl;
}
void receive_msg(int x)
{
std::cout << "receive " << x << std::endl;
}
};
#endif // RECEIVER_H
main.cpp
Sender m_sender;
Receiver m_receiver;
QObject::connect(&m_sender,SIGNAL(send_msg()),&m_receiver,SLOT(receive_msg()));
QObject::connect(&m_sender,SIGNAL(send_msg(int)),&m_receiver,SLOT(receive_msg(int)));
m_sender.send_msg();
m_sender.send_msg(3);
特別需要注意的是:
QT中,類要支持信號與槽機制,需要繼承自QObject並在頭文件開頭添加Q_OBJECT宏.
如果使用QtCreator創建類時,沒有選擇繼承自QObject類或其子類,而在創建後手工修改繼承自QObject並手工添加Q_OBJECT宏,則在編譯時有可能會出現”undefined reference to `vtable for’…….”的錯誤.
解決方法:
在創建類的時候需要選擇繼承自QObject類或其子類。
或者,清理所有項目->執行qmake->構建項目。