qt次线程指针问题

vip24688 2011-04-17 01:13:18
在Qt中处理很大数据量大时候用到了多线程
主线程中有一个vector里面装的是指针
现在要在次线程中来创建这些指针,添加到主线的vector里面来,但是这样的话就会提示错误
QObject: Cannot create children for a parent that is in a different thread.
...全文
256 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
vip24688 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jasonyak 的回复:]

引用 7 楼 vip24688 的回复:
引用 5 楼 jasonyak 的回复:

如果不影响你的封装,把PageItem声明成全局的可以解决你的问题

这个貌似不管PageItem的事吧


写错了,我的意思是把主、次线程共同维护的数据定义成全局变量!

还有就是次线程与主线程通讯可以用信号槽,这个是线程安全的
[/Quote]
听原理觉得还可以,我试试看嘛,谢谢解答@@@!!!!
JasonYak 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 vip24688 的回复:]
引用 5 楼 jasonyak 的回复:

如果不影响你的封装,把PageItem声明成全局的可以解决你的问题

这个貌似不管PageItem的事吧
[/Quote]

写错了,我的意思是把主、次线程共同维护的数据定义成全局变量!

还有就是次线程与主线程通讯可以用信号槽,这个是线程安全的
zhh_kv 2011-04-21
  • 打赏
  • 举报
回复
试试moveToThread函数
vip24688 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shaopengnet 的回复:]

你将线程类中用到的参数或者参数类的初始化都放到run方法里面再试试
[/Quote]
如果我放进去的话就是局部变量来,我怎么传回我的主线程呢? Thank you
vip24688 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jasonyak 的回复:]

如果不影响你的封装,把PageItem声明成全局的可以解决你的问题
[/Quote]
这个貌似不管PageItem的事吧
JasonYak 2011-04-18
  • 打赏
  • 举报
回复
如果不影响你的封装,把PageItem声明成全局的可以解决你的问题
vip24688 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shaopengnet 的回复:]

把你的线程类大概写下,我看看,应该能解决的
[/Quote]
void LoadThread::run ()
{
if (stopped)
return;

Sread sread (NULL, tFont, file);
for (int i = 10; i < pageNumber; ++i) {
pageContexts.append (sread.getAPageWords (i + 1));
PageItem *item = new PageItem (i + 1, paperSize, pageRect, pageContexts.at (i - 10));
pages.append (item);
}
emit updateView ();
}

我在线程中创建的是PageItem(继承自QGraphicsItem)的指针,创建好之后到回到主线程中,把创建的item添加到scene(parent)中去
shaopengnet 2011-04-18
  • 打赏
  • 举报
回复
把你的线程类大概写下,我看看,应该能解决的
shaopengnet 2011-04-18
  • 打赏
  • 举报
回复
你将线程类中用到的参数或者参数类的初始化都放到run方法里面再试试
vip24688 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dbzhang800 的回复:]

恩,现在你的具体问题是什么呢?

这个提示很明确:你在创建一个 QObject或其派生类的对象,但是你为其指定的parent不在本线程内
[/Quote]
对,我就是在次线程中创建了指针对象,然后在主线程中指定它的parent,因为创建的工作量很大,所以我弄到次线程,那应该怎么解决这个问题呢? 我必须得指定他的parent啊。谢谢!
dbzhang800 2011-04-17
  • 打赏
  • 举报
回复
恩,现在你的具体问题是什么呢?

这个提示很明确:你在创建一个 QObject或其派生类的对象,但是你为其指定的parent不在本线程内

16,213

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧