Как отсортировать данные по столбцу в табличном представлении, если щелкнуть заголовок

У меня есть QTableView который заполнен QSqlQueryModel, Я пытаюсь отсортировать таблицу по заголовку, но ничего не происходит, когда я нажимаю на них. Я использовал функцию sortByColumn()Проблема в том, что результат точно такой же, когда я нажимаю на заголовок, сортировка не работает. Что я делаю неправильно?

 Log cnn;
 QSqlQueryModel *modal=new QSqlQueryModel();
 QSqlQuery *qry=new QSqlQuery(cnn.mydb);
 qry->prepare("select *from log");
 qry->exec();
 modal->setQuery(*qry);
 ui->tableView->setModel(modal);
 ui->tableView->setAlternatingRowColors(true);
 ui->tableView->setSortingEnabled(true);
 ui->tableView->sortByColumn(4,Qt::AscendingOrder);//4 indicate the 4th column

2 ответа

А также я решил свою проблему, используя QSortFilterProxyModel.

Log cnn;
QSqlQueryModel *modal=new QSqlQueryModel(this);
QSqlQuery *qry=new QSqlQuery(cnn.mydb);
qry->prepare("select *from AccessLog");
qry->exec();
modal->setQuery(*qry);

QSortFilterProxyModel *m=new QSortFilterProxyModel(this);
m->setDynamicSortFilter(true);
m->setSourceModel(modal);
ui->tableView->setModel(m);
ui->tableView->setSortingEnabled(true);

Если вы не используете более одной таблицы, то QSqlTableModel соответствует вашим потребностям.

Вместо того, чтобы использовать QSqlQueryModel вы могли бы использовать

QSqlTableModel *model = new QSqlTableModel(this, mydb);
model->setTable("log");
model->select();
model->setHeaderData( 1, Qt::Horizontal, tr("header1") );
model->setHeaderData( 2, Qt::Horizontal, tr("header2") );

ui->tableView->setModel(model);

QSqlTableModel реализовал следующее:

void QSqlTableModel::sort ( int column, Qt::SortOrder order ) [virtual]

Таким образом, вы можете сортировать как:

model->sort (4, Qt::AscendingOrder);
Другие вопросы по тегам