Qtクラス間でデータをどのように渡すか

Qtにおいて、クラス間のデータのやりとりは、シグナルとスロットを駆使して実現可能だ。その一般的な手段の一つを以下に示す。

  1. 信号
class Sender : public QObject
{
    Q_OBJECT
signals:
    void dataReady(int data);
};
  1. パブリックスロット
class Receiver : public QObject
{
    Q_OBJECT
public slots:
    void receiveData(int data);
};
  1. QObject::connect
Sender sender;
Receiver receiver;

QObject::connect(&sender, SIGNAL(dataReady(int)), &receiver, SLOT(receiveData(int)));
  1. 発する
void Sender::sendData()
{
    int data = 10;
    emit dataReady(data);
}
  1. データを受信。受信されたデータを処理するスロット関数を、データを格納するクラスに実装する。たとえば、
void Receiver::receiveData(int data)
{
    qDebug() << "Received data:" << data;
}

送受信クラス側でSender::sendData()が呼び出されるとsignalのdataReady(int)が発火し、接続された槽関数であるReceiver::receiveData(int)が呼び出されて、送信されたデータを処理する。

bannerAds