我想知道如何确保在QTableView
模型上执行编程排序时更新 a 的水平标题中的排序指示符。
这是问题所在:
QStandardItemModel model(3,1);
QTableView view;
view.setModel( &model );
// Populate the model ensuring it is not in a sorted order
for( int row = 0; row < model.rowCount(); ++row )
{
model.setItem( row , 0 ,
new QStandardItem(QString::number((row+1)%model.rowCount())));
}
view.setSortingEnabled( true );
// At this point everything is consistent since enabling the sorting
// triggers a sort that matches the indicator in the horizontalHeader (see A)
model.sort( 0 , Qt::AscendingOrder );
// However at this point the sort order has been reversed but the
// header's sort indicator remains unchanged (see B)
甲:乙:
如您所见,排序指示符保持不变,因此与实际排序顺序不一致。
在我的应用程序中,我有两个与同一模型交互的视图,并且可以从它们中的任何一个触发排序。我在 QAbstractItemModel 中看不到任何表明何时执行排序的信号。似乎 QHeaderView/TableView 假设它们是唯一可以触发排序的东西。
Qt 是否提供了应对我所缺少的这一点的设施?如果不是,那么在不过多破坏模型上多个视图的封装的情况下,保持排序指示器最新的最佳方法是什么?