我正在使用QTableView和重新实现的QAbstractTableModel和QSortFilterProxyModel。
在此表格中显示了一些文件大小。
大小列的data(...)
方法返回在QStyleditemDelegate中形成的长long值,如2,38 Gb
例如,如果在表8000中填充了项目,则排序将花费大约2-3秒
我该如何改进呢?
的 EDIT1
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();
}