QTableView C++ сортировать при нажатии заголовка

Мне нужно отсортировать столбец в моей таблице, когда я нажимаю на заголовок столбца. Но сейчас я не могу, это мой стол:

введите описание изображения здесь

Нет никаких действий, если я нажму на заголовок.

Это мой код на 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();
}

Что я должен делать?

1 ответ

Решение

Вы должны сделать 2 вещи:

  • Включить sortingEnabled свойство представления, чтобы пользователь мог контролировать порядок, щелкая горизонтальный заголовок.

  • использование QSortFilterProxyModel обрабатывать отношения заказа.


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();
}

Вы можете добавить эти свойства после создания таблицы. Этот метод унаследован от класса QTableWidget.

Другие вопросы по тегам