0

我正在使用带有重新实现的 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();
}
4

0 回答 0