QT qtableview 不更新数据

本文介绍了解决QTableView使用QAbstractTableModel派生类时数据不更新的问题。作者发现多继承QObject导致信号槽机制冲突,移除后问题解决。

  用了Qtableview 搭配 从QAbstractTableModel 继承的XxxModel, 但 emit dataChanged( leftTop, rightBottom ); 后,tableview的数据

没有更新,后来发现是多继承了一个QObject


class XxxModel:  public QObject, public QAbstractTableModel  

把public QObject,去掉就可以了。大概是QAbstractTableModel  里面也有 QObject,信号插槽的实现就有两份了,导致emit以后没有slot接受。

QtQTableView中实现数据倒序显示,可借助其排序功能。QTableView本身提供了排序功能,能让用户依据同列的值对数据进行排序。 首先,要确保`sortingEnabled`属性已开启,这样才能使用排序功能。接着,调用`sortByColumn`方法并传入列索引和排序顺序(`Qt::DescendingOrder`代表倒序)来实现数据的倒序显示。 以下是示例代码: ```cpp #include <QTableView> #include <QStandardItemModel> #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建模型 QStandardItemModel model(4, 2); model.setHorizontalHeaderLabels({"Column 1", "Column 2"}); model.setItem(0, 0, new QStandardItem("Data 1")); model.setItem(0, 1, new QStandardItem("Data 2")); model.setItem(1, 0, new QStandardItem("Data 3")); model.setItem(1, 1, new QStandardItem("Data 4")); model.setItem(2, 0, new QStandardItem("Data 5")); model.setItem(2, 1, new QStandardItem("Data 6")); model.setItem(3, 0, new QStandardItem("Data 7")); model.setItem(3, 1, new QStandardItem("Data 8")); // 创建QTableView QTableView tableView; tableView.setModel(&model); // 开启排序功能 tableView.setSortingEnabled(true); // 按第一列倒序排序 tableView.sortByColumn(0, Qt::DescendingOrder); tableView.show(); return a.exec(); } ``` 在上述代码中,先创建了一个`QStandardItemModel`作为数据模型,然后将其设置给`QTableView`。开启`sortingEnabled`属性后,调用`sortByColumn`方法按第一列进行倒序排序。 若要对数据库中的数据进行倒序显示,可在`QSqlTableModel`中设置排序规则,示例如下: ```cpp #include <QTableView> #include <QSqlTableModel> #include <QVBoxLayout> #include <QWidget> #include <QSqlDatabase> #include <QSqlQuery> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 连接数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("your_database.db"); if (!db.open()) { return -1; } // 创建模型 QSqlTableModel model; model.setTable("your_table"); model.setSort(0, Qt::DescendingOrder); // 按第一列倒序排序 model.select(); // 创建QTableView QTableView tableView; tableView.setModel(&model); // 创建布局并显示 QWidget window; QVBoxLayout *layout = new QVBoxLayout(&window); layout->addWidget(&tableView); window.show(); return a.exec(); } ``` 在这个代码里,使用`QSqlTableModel`连接数据库,通过`setSort`方法设置按第一列倒序排序,最后将模型设置给`QTableView`显示数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值