header 单击时 QTableView C++ 排序

QTableView c++ sort when header clicking

当我单击 header 列时,我需要对 table 中的列进行排序。 但是现在我不能,那是我的 table:

点击header没有任何动作。

这是我的 C++ QT 代码:

    void showTable()
{
    connOpen();
    QSqlQueryModel * myModel=new QSqlQueryModel();
    QSqlQuery select;
    if (!select.exec("select * from tab")) {
        QMessageBox::critical(this, tr("Error"), select.lastError().text());
    }
    else {
        myModel->setQuery(select);
        ui->tableView->setModel(myModel);
    }
    connClose();
}

我该怎么办?

你必须做两件事:


void showTable()
{
    connOpen();
    QSqlQueryModel * myModel=new QSqlQueryModel(ui->tableView);
    QSqlQuery select;
    if (!select.exec("select * from tab")) {
        QMessageBox::critical(this, tr("Error"), select.lastError().text());
    }
    else {
        myModel->setQuery(select);
        QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(myModel); // create proxy
        proxyModel->setSourceModel(myModel);
        ui->tableView->setSortingEnabled(true); // enable sortingEnabled
        ui->tableView->setModel(proxyModel);
    }
    connClose();
}

您可以只启用排序方式:

filesTable->setSortingEnabled(true);

它对我有用。我使用 qt 5.15 和 QTableWidget 而不是 QTableView。

这是您的代码示例:

    void showTable()
{
    ui->tableView->setSortingEnabled(true); //
    connOpen();
    QSqlQueryModel * myModel=new QSqlQueryModel();
    QSqlQuery select;
    if (!select.exec("select * from tab")) {
        QMessageBox::critical(this, tr("Error"), select.lastError().text());
    }
    else {
        myModel->setQuery(select);
        ui->tableView->setModel(myModel);
    }
    connClose();
}

您可以在创建 table 后添加此属性。该方法继承自QTableWidget Class.