在qabstractitemmodel :: data()中,如何添加一些线程安全数据
qabstractItemmodel :: data()是一个'const'函数,因此我不能添加我的范围MUTEX锁定,但是我的数据必须在某个地方更改,因此必须需要一个utex锁,我该如何解决这个问题?
ps:我尝试了连接/发射,但是信号也需要" const"关键字,所以我需要使用tcp套接字??
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
{
QMutexLocker locker(&cacheMutex_);
auto cacheTime = logCache_.find(key_);
}
来自您的代码段,我相信您是要添加一些同步对象作为派生的类成员。如果So @tas的评论已经是一个答案:同步对象在概念上不被视为您的数据的一部分,因此只需在您的派生类中标记它们:
Mutable qmutex cachemutex _;
数据成员标记为突变的数据仍然可以在const成员函数中进行修改。
阅读有关QMetaObject
的更多信息。并始终在主线程中使用UI。尝试使用QMetaObject::invokeMethod(..., Qt::BlockingQueuedConnection)
,您的方法将在主线程中执行。因此,您不需要静音。谢谢!