如果单击标题视图,如何在表视图中按列对数据进行排序

时间:2014-03-26 05:13:20

标签: c++ qt qt5 qtableview

我有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

2 个答案:

答案 0 :(得分:3)

我也使用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);

答案 1 :(得分:0)

如果您不使用多个表格,则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);