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
.将其移至新线程中
现在,当您使用信号和插槽时,插槽将在正确的线程中运行。 请参见for for示例的official qthread文档。