Qt中QSqlQueryModel对应的表格进行自动排序功能
Qt中使用了自己的机制来避免使用SQL语句,为我们提供了更简单的数据库操作及数据显示模型,分别是只读的QSqlQueryModel,操作单表的QSqlTableModel和以及可以支持外键的QSqlRelationalTableMode
如果要使用排序功能,需要建立信号槽
//表头设置排序箭头,
ui->tableView->horizontalHeader()->setSortIndicatorShown(true);
//建立信号槽
connect(ui->tableView->horizontalHeader(),&QHeaderView::sectionClicked, this, &StudentManagerDialog::on_tableView_sort);
createDatabase();
槽函数
void StudentManagerDialog::on_tableView_sort(const int column)
{
ui->tableView->sortByColumn(column);
}
在QSqlQueryModel模型中,是不具备排序能力的,必须重写其虚函数sort来实现排序,但是可以通过代理的方式来实现排序,具体实现方法核心代码如下:
QString str = "SELECT * FROM student";
model.setQuery(str);
QSortFilterProxyModel* filterModel = new QSortFilterProxyModel(this);
filterModel->setSourceModel(&model);
ui->tableView->setModel(filterModel);
这样便能够实现点击tableView实现排序,若需要自定义的排序,也非常简单,继承QSortFilterProxyModel类,并重写lessThan函数即可!