在QAbstractItemModel :: data()中,如何添加一些线程安全数据
QAbstractItemModel :: data()是一个'const'函数,所以我无法添加我的作用域互斥锁,但我的数据必须在某处更改,所以它必须需要一个互斥锁,我该如何解决这个问题呢?
ps:我尝试过connect / emit,但信号也需要'const'关键字,所以我需要使用TCP套接字吗?
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
{
QMutexLocker locker(&cacheMutex_);
auto cacheTime = logCache_.find(key_);
}
从您的代码片段我相信您的意思是添加一些同步对象作为派生类成员。如果是这样的@Tas'评论已经是一个答案:同步对象在概念上不被视为数据的一部分,所以只需在派生类中标记它们是可变的:
可变QMutex cacheMutex_;
标记为可变的数据成员仍可在const成员函数中修改。
了解更多关于QMetaObject
的信息。并始终使用主线程中的UI。尝试使用QMetaObject::invokeMethod(..., Qt::BlockingQueuedConnection)
,您的方法将在主线程中执行。所以你不需要互斥。谢谢!