簡體   English   中英

qt-如何對qstandarditemmodel進行永久排序

[英]qt - how to permanently sort a 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);
}

如前所述,這似乎只是對視圖中的項目進行排序,因為當我嘗試輸出存儲在模型中的所有記錄時,它與最初輸入時一樣沒有改變。 我如何才能對模型本身進行排序並保存該順序?

QStandardItemModel不實現排序。

從Qt文檔中:

無效的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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM