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();
}
我该怎么办?
你必须做两件事:
启用视图的 sortingEnabled
属性 以便用户可以通过单击水平 header.[=15= 来控制顺序]
使用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();
}
您可以在创建 table 后添加此属性。该方法继承自QTableWidget Class.
当我单击 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();
}
我该怎么办?
你必须做两件事:
启用视图的
sortingEnabled
属性 以便用户可以通过单击水平 header.[=15= 来控制顺序]使用
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();
}
您可以在创建 table 后添加此属性。该方法继承自QTableWidget Class.