Qtクラス間でデータをどのように渡すか
Qtにおいて、クラス間のデータのやりとりは、シグナルとスロットを駆使して実現可能だ。その一般的な手段の一つを以下に示す。
- 信号
class Sender : public QObject
{
Q_OBJECT
signals:
void dataReady(int data);
};
- パブリックスロット
class Receiver : public QObject
{
Q_OBJECT
public slots:
void receiveData(int data);
};
- QObject::connect
Sender sender;
Receiver receiver;
QObject::connect(&sender, SIGNAL(dataReady(int)), &receiver, SLOT(receiveData(int)));
- 発する
void Sender::sendData()
{
int data = 10;
emit dataReady(data);
}
- データを受信。受信されたデータを処理するスロット関数を、データを格納するクラスに実装する。たとえば、
void Receiver::receiveData(int data)
{
qDebug() << "Received data:" << data;
}
送受信クラス側でSender::sendData()が呼び出されるとsignalのdataReady(int)が発火し、接続された槽関数であるReceiver::receiveData(int)が呼び出されて、送信されたデータを処理する。