multithreading - 从非 UI QThread 修改 QStandardItemModel?

标签 multithreading qt thread-safety qthread qstandarditemmodel

我有 Qt4 应用程序,它将 QStandardItemModel 绑定(bind)到 QListView 并从后台/非 UI 线程更新模型。

有时,当从非 UI 线程中反复调用 QStandardItemsetText(..) 方法时,应用程序会在 dataChanged( ..) 处理程序。我可以通过在 for 循环中重复调用 setText("xxxxx") 来重现该问题。在我的应用程序中,数据是从网络读取的,因此我在单独的非 UI 线程中更新模型。

这是普通的pb吗?如果我理解正确,这与排队连接有关,并且 QStandardItemModel 不是线程安全的?如何解决这个问题?

谢谢!

最佳答案

QStandardItemModel 是 QtGui 库的一部分,iirc 中的所有类都被认为不是线程安全的。如果将数据的实际设置移至 GUI 线程中,应该没问题。您可以通过使用网络线程中的排队信号轻松地做到这一点。

关于multithreading - 从非 UI QThread 修改 QStandardItemModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4416706/

相关文章:

multithreading - bash中的简单后台进程问题

Java HashMap 用于有序数据访问

c++ - 如何在qt中获取主窗口的touchevent

c++ - 在 Qt 中隐藏和重新启动同一个 QApplication 实例

.net - Silverlight 应用程序中的无效跨线程访问

linux - Linux 内核线程的调度或抢占是如何工作的?

multithreading - go指针多线程读写错误

c++ - QList中QPushButton的坐标

c++ - Visual C++ 2010 中的 STL 映射实现和线程安全

c# - Dispatcher.Invoke 和线程访问的问题