2014-03-26 28 views
2

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

回答

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); 
2

,也是我解決我的問題使用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); 
相關問題