如果单击标题视图,如何在表格视图中按列对数据进行排序
Posted
技术标签:
【中文标题】如果单击标题视图,如何在表格视图中按列对数据进行排序【英文标题】:How to sort data by column in a table view if click to headerview 【发布时间】:2014-03-26 05:13:19 【问题描述】:我有一个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
【问题讨论】:
【参考方案1】:我还使用 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);
【讨论】:
【参考方案2】:如果您不使用多个表,那么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);
【讨论】:
以上是关于如果单击标题视图,如何在表格视图中按列对数据进行排序的主要内容,如果未能解决你的问题,请参考以下文章
在 Bootstrap-Vue 中按列对 <b-table> 进行排序并禁止用户排序