Multithreading Qt-Qt并发进程条更新

Multithreading Qt-Qt并发进程条更新,multithreading,qt,qtableview,qtconcurrent,qprogressbar,Multithreading,Qt,Qtableview,Qtconcurrent,Qprogressbar,我有一个QTableView连接到QAbstractTableModel 该模型与QtConcurrent::map一起用于为应用程序创建线程(复制文件) 我将QStyledItemDelegate子类化,以在一个TableView单元格中显示QStyleOptionProgressBar,其思想是通过模型更新进度条。它可以工作,但一次从0%到100%,并不平滑 在我的“复制循环”中调用了QAbstractTableModel::setData(),但似乎QAbstractTableModel:

我有一个
QTableView
连接到
QAbstractTableModel

该模型与
QtConcurrent::map
一起用于为应用程序创建线程(复制文件)

我将
QStyledItemDelegate
子类化,以在一个TableView单元格中显示
QStyleOptionProgressBar
,其思想是通过模型更新进度条。它可以工作,但一次从0%到100%,并不平滑

在我的“复制循环”中调用了
QAbstractTableModel::setData()
,但似乎
QAbstractTableModel::dataChanged()
仅在循环结束时发射。不管我做什么


这可能是一种错误的方法,但我不知道如何从线程访问表视图中给定的进度条。

您需要在子类化为
QAbstractTableModel
的表模型类中自己实现setData()。基类实现不执行任何操作并返回
false
。如果数据设置成功,您负责发出
dataChanged()
信号。

我已经这样做了。问题似乎是因为setData()是在循环中调用的。循环结束时,将更新模型。我只需要它发生在循环内部。你应该看看这里(如果它仍然相关),