スレッド内のデータをどのようにして取り出すのか。
Qtでは、スレッド内のデータを送受信するためにシグナルとスロットメカニズムを使用することができます。具体的な手順は次のとおりです:
- スレッドクラス内でデータを送信するための信号を定義します。
- メインスレッドでこのシグナルとスロット関数を接続し、データを受信するために使用します。
- このシグナルをスレッド内で発信し、データをメインスレッドに送信します。
以下は簡単な例です:
#include <QThread>
#include <QObject>
class MyThread : public QThread
{
Q_OBJECT
signals:
void dataReady(int value);
protected:
void run() override
{
int result = 42;
emit dataReady(result);
}
};
class MyObject : public QObject
{
Q_OBJECT
public slots:
void onDataReady(int value)
{
qDebug() << "Data received from thread: " << value;
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyThread thread;
MyObject obj;
QObject::connect(&thread, &MyThread::dataReady, &obj, &MyObject::onDataReady);
thread.start();
return app.exec();
}
上記の例では、MyThreadクラスはQThreadを継承しており、データを送信するためのdataReady信号を定義しています。また、MyObjectクラスはQObjectを継承しており、データを受信するためのスロット関数であるonDataReadyを定義しています。
主関数では、スレッドオブジェクトとオブジェクトを作成し、スレッドのdataReadyシグナルとオブジェクトのonDataReadyスロット関数を接続しました。スレッドが実行されると、dataReadyシグナルが発信され、データがメインスレッドのonDataReadyスロット関数に渡されるため、スレッド内からデータを取り出す機能が実現されます。