我正在使用带有重新实现的 QAbstractTableModel 和 QSortFilterProxyModel 的 QTableView。
在此表中显示了一些文件大小。
data(...)
Size 列的方法返回一个 long long 值,该值在 QStyleeditemDelegate 中格式化,
例如 2,38 Gb 例如,如果在表 8000 中填充了项目,排序将花费大约 2-3 秒。
我该如何改进呢?
编辑1
QVariant FileViewModel::data( const QModelIndex &index, int role /*= Qt::DisplayRole */ ) const
{
qDebug() << "FileViewModel::data" << index.row() << index.column();
int column = index.column();
if (role == Qt::DisplayRole && dataSource.storrage.is_valid())
{
int row = index.row();
internal_file_entry file = dataSource.storrage.internal_at(row);
switch (column)
{
case 0:
return QString::fromStdString(dataSource.storrage.file_path(file));
case 1:
return dataSource.storrage.file_size(file);
case 2:
return dataSource.progresses[row]*100.0f;
case 3:
return dataSource.priorities[row];
}
}
}
创建和应用模型
void AppMainView::setupFileTabel()
{
fileViewModel = new FileViewModel(this);
QSortFilterProxyModel* proxymodel = new QSortFilterProxyModel(this);
proxymodel->setSourceModel(fileViewModel);
fileTableView->setModel(proxymodel);
fileTableView->setShowGrid(false);
fileTableView->setContextMenuPolicy(Qt::CustomContextMenu);
fileTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
fileTableView->setItemDelegateForColumn(1,new FileSizeItemDelegate(this));
fileTableView->setItemDelegateForColumn(2,new ProgressItemDelegate(this));
fileTableView->setItemDelegateForColumn(3,new PriorityItemDelegate(this));
fileTableView->setSortingEnabled(true);
fileTableView->setColumnWidth(0,300);
fileTableView->setColumnWidth(1,65);
fileTableView->setColumnWidth(2,65);
fileTableView->setColumnWidth(3,70);
setupFileTabelContextMenu();
}