Qt中QSqlQueryModel对应的表格进行自动排序功能
Qt中使用了自己的机制来避免使用SQL语句,为我们提供了更简单的数据库操作及数据显示模型,分别是只读的QSqlQueryModel,操作单表的QSqlTableModel和以及可以支持外键的QSqlRelationalTableMode
如果要使用排序功能,需要建立信号槽
1 2 3 4 5 | //表头设置排序箭头, ui->tableView->horizontalHeader()->setSortIndicatorShown( true ); //建立信号槽 connect(ui->tableView->horizontalHeader(),&QHeaderView::sectionClicked, this , &StudentManagerDialog::on_tableView_sort); createDatabase(); |
槽函数
1 2 3 4 | void StudentManagerDialog::on_tableView_sort( const int column) { ui->tableView->sortByColumn(column); } |
在QSqlQueryModel模型中,是不具备排序能力的,必须重写其虚函数sort来实现排序,但是可以通过代理的方式来实现排序,具体实现方法核心代码如下:
1 2 3 4 5 | QString str = "SELECT * FROM student" ; model.setQuery(str); QSortFilterProxyModel* filterModel = new QSortFilterProxyModel( this ); filterModel->setSourceModel(&model); ui->tableView->setModel(filterModel); |
这样便能够实现点击tableView实现排序,若需要自定义的排序,也非常简单,继承QSortFilterProxyModel类,并重写lessThan函数即可!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix