在 QAbstractItemModel::data() const 中,我如何添加一些线程安全数据

In QAbstractItemModel::data() const, how can i add some thread safe data

在 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_);
}

根据您的代码片段,我相信您的意思是添加一些同步对象作为派生 class 成员。如果是这样,@Tas 的评论已经是一个答案:同步对象在概念上不被视为数据的一部分,因此只需在派生的 class:

中将它们标记为可变

可变 QMutex 缓存 Mutex_;

标记为 mutable 的数据成员仍然可以在 const 成员函数中修改。

阅读有关 QMetaObject 的更多信息。并始终在主线程中使用 UI。 尝试使用QMetaObject::invokeMethod(..., Qt::BlockingQueuedConnection),你的方法将在主线程中执行。 所以你不需要互斥量。谢谢!