从其他线程更新QT图形视图
Update QT Graphicview from other Thread
我现在真的很困惑QT中的线程。我读了很多不同的观点,我能意识到这一点。
我有一门课(Computations),它会进行大量计算并生成大量解决方案。当这个类找到解决方案时,我会在的帮助下调用
boost::function<void (Solution)> f;
自定义函数。可以与结合
f = boost::bind( &MainWindow::FoundSolution, this,_1);
不,我的主窗口在QT中。在那里,我把我的课叫做计算
Computations comp(f);
QFuture<void> future = QtConcurrent::run(comp,&Computations::DoSomethink);
因此,当我可以使用GUI时,它会进行计算,并且我会在主窗口中获得新解决方案对FoundSolution函数的响应。在这个函数中,我使用QGraphicview来绘制我的解决方案。Qgraphicsview是我的主窗口的一个成员。
这有时有效。
但我经常得到以下错误
QCOREApplication::SendEvent:"无法将事件发送到对象通过不同的线程owend。当前线程438bc40。接受者"(类型为"Qgraphicscene")是在线程15dcc00中创建的,文件内核应用程序行494
这意味着我从非主线程调用GUI应用程序,这是QT禁止的。但随着我的助推绑定,我应该在我的主线上,还是?为什么它有时有效?
你知道更好的实现方法吗?我对QT和线程真的很陌生。
谢谢你的帮助。
如果从连接到ui线程中对象插槽的工作线程发出信号,则该插槽将在ui线程中执行。
因此,基本上,如果您想在QGraphicsView中绘制一个新点,请从您的工作线程发送一个信号,传递要绘制的新点的坐标。该信号需要连接到ui线程中的一个对象。然后,该槽将处理在QGraphicsView中绘制新点的操作,因为该槽是在ui线程中执行的。
有关更多信息,请参阅线程间的信号和插槽
实现这一点的正常方法是使用信号和插槽。你可以在这里找到一些针对你的问题的文档:问题4.8,问题5。
connect( &sender, SIGNAL(), &receiver, SLOT(), Qt::QueuedConnection)
更简单的修复方法是将Qt::QueuedConnection添加到有问题的插槽连接调用中。
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 视图中的参数推导失败:take_while
- C++图形类指针混淆
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何维护资源管理器项目视图中当前可见的项目列表
- 如何将到达图形视图右侧(末端)的QGraphicsPixmapItem移动到左侧(开始)侧(就像在贪吃蛇游戏中发生的事情
- 图形视图缩小比例问题
- 从其他线程更新QT图形视图
- 具有两个OpenGL图形视图的MFC MDI拆分器无法工作
- 自定义图形列表视图项目不更改文本颜色
- 忽略 qt 中第二个图形视图上的场景中的 drawForeground()
- QT 图形场景/视图 - 使用鼠标四处移动
- 如何在Qt小工具项目中更新图形视图(Qt Creator)
- 从字节数组将图像加载到图形视图中
- 了解QT的图形视图坐标系
- 要将QPushButton放置到图形视图上..但是没有显示按钮
- 在图形视图中剪切复制粘贴
- 文本在图形视图在Qt
- 在Qt图形视图中跟踪折线