qt - 如何永久排序qstandarditemmodel

时间:2017-09-08 21:54:13

标签: c++ qt sorting qtableview qstandarditemmodel

我有一个程序,我试图在表格视图中显示的qstandarditemmodel上实现排序。但是,我使用的方法似乎并没有真正对模型本身进行排序,而只是对视图进行排序。我需要它能够对源模型进行排序,因为我使用委托将数据保存到.csv文件中,该委托将项目中的项目传递给类的对象,如果视图是唯一被排序的东西由于视图中项目的位置被更改而不是模型本身导致数据丢失。

这是我在mainwidget构造函数中使用的代码,用于将headerview单击信号连接到对模型进行排序的方法:

currentStudentsModel = new QStandardItemModel(this);

ui->currentTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui->currentTableView->setModel(currentStudentsModel);

ui->currentTableView->setItemDelegate(currentStudentsDelegate);
currentTableHeader = ui->currentTableView->horizontalHeader();
connect(currentTableHeader, SIGNAL(sectionClicked(int)), this, SLOT(on_sectionClicked(int)));

这是on_sectionClicked():

void mainWidget::on_sectionClicked(int index)
{
   currentStudentsModel->sort(index,Qt::AscendingOrder);
}

正如我之前所说,这似乎只对视图中的项目进行排序,因为当我尝试输出模型中存储的所有记录时,它们从最初输入时没有变化。如何让模型自行排序以及要保存的顺序?

1 个答案:

答案 0 :(得分:-1)

QStandardItemModel不实现排序。

来自Qt文档:

  

void QAbstractItemModel :: sort(int column,Qt :: SortOrder order =   Qt的:: AscendingOrder)

     

按给定顺序按列对模型进行排序。基类   实施什么都不做。

您需要对QSortFilterProxyModel进行排序

currentStudentsProxyModel = new QSortFilterProxyModel;
currentStudentsModel->setSourceModel( currentStudentsProxyModel );
currentStudentsProxyModel->sort( 0, Qt::AscendingOrder );

void mainWidget::on_sectionClicked(int index)
{
    currentStudentsProxyModel->sort(index,Qt::AscendingOrder);
}