gpt4 book ai didi

c++ - 使用 Qt Table View 显示大数据

转载 作者:行者123 更新时间:2023-11-30 02:52:58 24 4
gpt4 key购买 nike

我不确定如何解决这个大数据问题。建议不要使用 Table Widget,而是对大数据使用 Table View 以提高速度。数据最多为 200000 行乘以 300 列字符串。此外,它可能在结构上存在差距。对于View,需要定义一个Model。我还不能做到这一点,我想知道以下问题:

如果用户只想替换列中的某些值并检查数据,那么使用 View 真的会更快吗?考虑到速度需求,QList 是明智的选择,还是有更好的选择?以及如何将其作为模型来实现?

最佳答案

QTableWidget 使用自己的模型作为后端(其数据的容器)。不能(或者不应该)自定义 QTableWidget 的模型。 QTableWidget 中的每个单元格都由一个 QTableWidgetItem 表示。它们是为解决一般问题而编写的,速度不是那么快。

当一个人决定使用一个 QTableView 和它自己的从 QAbstractTableModel 派生的模型作为后端时,可以加快分配速度。我发现处理时间最长的事情之一是行的大小计算。我像这样在我的表中重载了 sizeHintForRow:

int MyTable::sizeHintForRow ( int row ) const
{
//All rows have the same height in MyTable, hence we use the height of the
// first row for performance reasons.
if( cachedRowSizeHint_ == -1 )
{
cachedRowSizeHint_ =
model()->headerData( 0, Qt::Vertical, Qt::SizeHintRole ).toSize().height();
}
return cachedRowSizeHint_;
}

实现一个简单的表模型非常容易(Qt 帮助文件就足够了......)。可以从提供最低角色(编辑和显示)的数据开始。必要时,始终可以使用 QIdentityProxyModels 修改 TableModel 数据。如果您的模型不起作用,请发布您的代码。请记住不要为角色返回无效数据,例如:

QVariant IO_PluginMngr::data(const QModelIndex & index, int role) const
{
if( index.isValid() )
{
if( role == Qt::DisplayRole)
{
return sequence_[index.row()][index.column()];
}
}
return QVariant();
}

例如返回错误的数据,特别是 SizeHintRole 会导致 View 的破坏。

我注意到,在实现模型时,应该在适当的时候勤于调用 begin/endInsertRows,否则持久模型索引将不起作用。

我们编写了更复杂的表,其中数据在后台线程中修改,并在更新表之前换出。可以提高速度的领域之一是永远不要对模型中的数据进行排序,而是使用引用真实(无序)数据的有序引用序列。我们有大约有 1000 行和 50 列的表,每秒更新一次(有很多 View ),我们的处理器占用了大约 20%,但最大的速度改进是 sizeHint 的缓存。

关于c++ - 使用 Qt Table View 显示大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18421603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com