排序大表

时间:2013-08-20 14:30:54

标签: qt sorting qtableview

我正在使用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();
}

0 个答案:

没有答案