QT线程交换数据

问题描述 投票:0回答:1
QThread

这个工作完美。

现在我决定也共享文件的元数据,为此,我有自己的大结构,所以我做到了:

void FoundNewFile(QString SourceDrive, QString Path, QString FileName);

这个
void FoundNewFile(QString SourceDrive, QString Path, QString FileName, MetaData* meta);
相当大,包含不同的数据类型,并具有多个链接结构。 现在,当信号发出时,在主线程中,当我尝试做时:

MetaData

我得到访问拒绝错误。
1)我在做什么(没有元数据)是对的,或者那也是错的?

2)什么是解决方案?

P.S。我尝试了
meta->datetime->creationhour;

Q_DECLARE_METATYPE
一起,没有起作用。

如果您继承了Qthread,则实现新插槽。它不会做您想要的。 QThread对象管理线程,但不是线程。您的Qthread衍生对象活在主线程中,因此它们的插槽将在主线程

(而不是新线程!)

中运行。

正确的解决方案是:

没有子类qthread。只需实例化一个qthread对象即可。
subclass qobject创建一个工人。
启用您的工人,然后使用
qRegisterMetaType
.

将其移至新线程中
c++ multithreading qt
1个回答
3
投票

现在,当您使用信号和插槽时,插槽将在正确的线程中运行。 请参见for for示例的official qthread文档。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.