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函数即可!