При установке setSortingEnabled(true) экземпляра QTableView в хэдерах колонок появляются переключаемые значки сортировки, но при нажатиях на них сама сортировка данных в таблице не происходит. Я так понимаю, установки одной setSortingEnabled(true) мало? Нужно переопределить ещё что-то?
Нужно переопределить ещё что-то?
Безусловно. Там где-то в дебрях вашего кода опишите нужный слот, который будет сортировать (или обеспечивать условия сортировки), назовем его virtual void SlotSort(int iColumn). Тогда в виджете, где находится QTableView соединяем сигнал со слотом:
connect(Table->horizontalHeader(),SIGNAL(sectionClicked(int)), this, SLOT(SlotSort(int)));
Где, Table - и есть QTableView*
Упрощенный пример слота сортировки
void Browse_Card::SlotSort(int iColumn) {
// в классе запоминаеися номер колонки текущей сортировки
SortColumn = iColumn;
// в классе запоминаеися направление сортировки
SortOrder = Table->horizontalHeader()->sortIndicatorOrder();
// далее собирается "хвост" SQL-запроса, который также хранится в классе
OrderBy = " ORDER BY ";
if (Mode == bcService) {
switch (iColumn) {
case 3: OrderBy += "LOWER(f.\"Surname\") "; break;
case 4: OrderBy += "LOWER(f.\"FirstName\") "; break;
case 5: OrderBy += "LOWER(f.\"Patronymic\") "; break;
case 6: OrderBy += "f.\"Age\" "; break;
case 7: OrderBy += "LOWER(f.\"Reason\") "; break;
case 8: OrderBy += "LOWER(f.\"Present\") "; break;
default: OrderBy += "f.\"SortNum\" "; break;
}
}
if (SortOrder == Qt::DescendingOrder) OrderBy += "DESC";
// тут можно флаг выставить, либо emit сигнала на обновление
NeedUpdate = true;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей