Я хочу знать, как обеспечить обновление индикатора сортировки в горизонтальном заголовке QTableView
при выполнении программной сортировки модели.
Вот проблема:
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)
A: B:
Как видите, индикатор сортировки остается прежним и, следовательно, не соответствует фактическому порядку сортировки.
В моем приложении у меня есть два представления, которые взаимодействуют с одной и той же моделью, и сортировка может быть запущена из любого из них. Я не вижу в QAbstractItemModel ничего, что сигнализировало бы о выполнении сортировки. Похоже, что QHeaderView/TableView предполагают, что это единственное, что может вызвать сортировку.
Предоставляет ли Qt средства для решения этой проблемы, которую мне не хватает? Если нет, то как лучше всего поддерживать индикатор сортировки в актуальном состоянии, не нарушая слишком сильно инкапсуляцию нескольких представлений модели?
QTableView::sortByColumn()
, которая, IMO, также должна устанавливать индикатор сортировки. - person vahancho   schedule 02.06.2014sort()
вашей модели вы можете вызыватьQTableView::sortByColumn()
для каждого из ваших представлений. - person vahancho   schedule 02.06.2014