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

时间:2019-03-08 00:34:36

标签: c++ qt qt5 qt4 qabstractitemmodel

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

2 个答案:

答案 0 :(得分:2)

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

可变QMutex cacheMutex _;

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

答案 1 :(得分:0)

详细了解QMetaObject。并始终在主线程中使用UI。 尝试使用QMetaObject::invokeMethod(..., Qt::BlockingQueuedConnection),您的方法将在主线程中执行。 因此,您不需要互斥。谢谢!