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

posted @ 2023-02-04 18:47  unicornsir  阅读(272)  评论(0编辑  收藏  举报