【问题标题】: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

【问题讨论】:

    标签: c++ qt qt5 qtableview


    【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-28
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        相关资源
        最近更新 更多