他のスレッドからピックスマップを変更できないため、シグナルとスロットを使用して、別のスレッドから GUI スレッドに情報を渡そうとしています。実行時エラーが発生しました:
Object::connect: No such signal QThread::image_change(std::string) in visualiser.cpp:33
このことから判断すると、私が間違っているかもしれませんが、シグナルは実際には で定義されているため、間違った名前空間で検索されているようですVisualiser::image_change()
。
私のコードは次のとおりです。
ビジュアライザー.cpp:
QFutureWatcher<void> watcher;
connect(watcher.thread(), SIGNAL(image_change(std::string)), QCoreApplication::instance()->thread(), SLOT(update_image(std::string)), Qt::QueuedConnection);
QFuture<void> update_thread = QtConcurrent::run(this, &Visualiser::update_state);
watcher.setFuture(update_thread);
...
emit(image_change(imageSrc));
...
void Visualiser::update_image(std::string src)
{
QImage image;
image.load(src.c_str());
ui->visualContainer->setPixmap(QPixmap::fromImage(image));
}
ビジュアライザー.h:
signals:
void image_change(std::string src);
public slots:
void update_image(std::string src);