我有两个班级:A班和B班。
在A类中,我有一个私有插槽Refresh
,它每两秒使用一次QTimer调用,有助于更新QTableView中的值。
B类由QThread定义,在run
函数中,我借助套接字和所有函数从客户端获取数据。
现在的问题是,当run
从客户端获取数据时,QTimer会更新表,从而在不更新所有数据的情况下进行更新。有时它更新更少,反之亦然。如果我们以一种方式同步,Refresh
函数可以正常工作,就可以完成此操作。但是我怎么能这样做呢?因为Refresh
属于另一个类,所以我想到了一种将QTimer与睡眠同步的方法,或者我只能在B类中调用该函数的方法。
答案 0 :(得分:2)
在@tyke建议的Qt中使用互斥锁(QMutex)。在包含数据的类中添加互斥锁。
在类头文件中:
class MyDataClass : public QObject
{
Q_OBJECT
...
signals:
void dataChanged();
private:
QMutex mutex;
....
并在访问数据的方法中:
MyDataClass::accessFromAnyThread(QString newNode) {
mutex.lock();
...
//access critical data e.g.
this->data.append(newNode);
...
mutex.unlock();
emit dataChanged();
}
如果您正在进行阅读和写作,那么如果您遇到性能问题,应该查看QSermaphore。
希望这能让你到达某个地方......
答案 1 :(得分:0)
我不完全确定你要做什么,但我认为你可以使用QAbstractTableModel。
在此模型的实现中填写您收到的数据,并通过
将其添加到表格视图中yourtableview->setmodel(yourtablemodel)
然后你不需要Refresh()函数或类似的东西。 tableview将始终显示模型的内容。