QTableView C++ сортировать при нажатии заголовка
Мне нужно отсортировать столбец в моей таблице, когда я нажимаю на заголовок столбца. Но сейчас я не могу, это мой стол:
Нет никаких действий, если я нажму на заголовок.
Это мой код на C++ QT:
void showTable()
{
connOpen();
QSqlQueryModel * myModel=new QSqlQueryModel();
QSqlQuery select;
if (!select.exec("select * from tab")) {
QMessageBox::critical(this, tr("Error"), select.lastError().text());
}
else {
myModel->setQuery(select);
ui->tableView->setModel(myModel);
}
connClose();
}
Что я должен делать?
1 ответ
Решение
Вы должны сделать 2 вещи:
Включить
sortingEnabled
свойство представления, чтобы пользователь мог контролировать порядок, щелкая горизонтальный заголовок.использование
QSortFilterProxyModel
обрабатывать отношения заказа.
void showTable()
{
connOpen();
QSqlQueryModel * myModel=new QSqlQueryModel(ui->tableView);
QSqlQuery select;
if (!select.exec("select * from tab")) {
QMessageBox::critical(this, tr("Error"), select.lastError().text());
}
else {
myModel->setQuery(select);
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(myModel); // create proxy
proxyModel->setSourceModel(myModel);
ui->tableView->setSortingEnabled(true); // enable sortingEnabled
ui->tableView->setModel(proxyModel);
}
connClose();
}
Вы можете просто включить сортировку:
filesTable->setSortingEnabled(true);
У меня это сработало. Я использую qt 5.15 и QTableWidget вместо QTableView.
Вот пример вашего кода:
void showTable()
{
ui->tableView->setSortingEnabled(true); //
connOpen();
QSqlQueryModel * myModel=new QSqlQueryModel();
QSqlQuery select;
if (!select.exec("select * from tab")) {
QMessageBox::critical(this, tr("Error"), select.lastError().text());
}
else {
myModel->setQuery(select);
ui->tableView->setModel(myModel);
}
connClose();
}
Вы можете добавить эти свойства после создания таблицы. Этот метод унаследован от класса QTableWidget.