QTableView 显示行但不显示数据

如上图所示,这是一个显示数据的代码,但是运行后却是这样:


在数据库中表FLIGHTS的确只有两个记录,但是都不是空的:


这个到底是啥问题呢?

到底是什么原因不知到,但是只要把所有的QSqlTableModel或是QSqlQuerymodel都声明为局部变量,这个问题就解决了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 如果要在QTableView显示百万条数据,要考虑以下两个方面: 1. 数据源 对于数据源,应该优先考虑使用数据库,因为数据库具有高效地存储和检索大量数据的能力。可以使用本地数据库,如SQLite,或者远程数据库,如MySQL或PostgreSQL。如果数据不是来自数据库,也可以使用QStandardItemModel等模型来组织数据。 2. 显示 QTableView会在启动时尝试将所有数据加载进内存并显示,如果数据量很大,这可能会导致内存不足而程序崩溃。这个问题可以通过分页和懒加载来解决。 分页:将数据分页加载,每次只加载一页数据到内存中,用户滚动QTableView时再加载下一页。这可以通过使用QAbstractItemModel的rowCount()方法来实现。 懒加载:仅在需要时加载数据,而不是把整个数据集都加载进内存。用QAbstractItemModel的data()方法获取数据并动态地从数据源中加载数据。 总之,QTableView显示大量数据时,需要考虑数据源和分页/懒加载。必要时,可以使用其他Qt组件来优化性能,例如QListView或QTreeView替代QTableView。 ### 回答2: 在使用QTableView显示百万数据时,我们需要考虑到以下几个方面: 1. 数据读取与处理:由于数据过多,一次性将所有数据读取到程序中会占用大量内存,造成程序运缓慢甚至崩溃。因此,可以使用分页读取的方式,每次读取一部分数据,对数据排序后再显示QTableView中,这样可以大大提高程序运效率。 2. 模型的选择:在QTableView中,模型的选择对程序运效率也有很大的影响。如果使用默认的QStandardItemModel模型,它会将数据全部存储在内存中,当数据量很大时会非常耗费内存。因此,可以选择使用QSqlQueryModel或QSqlTableModel等数据库模型来代替,因为它们可以直接从数据库中读取数据显示。 3. 视图的优化:可以使用setOptimizationFlag()函数来进优化。例如,设置QAbstractItemView::DontSavePainterState标志可以使得绘制视图时不会保存绘图状态,这样可以降低内存的占用;设置QAbstractItemView::Batched标志可以一次性绘制多数据,提高绘制效率。 4. 使用线程:在数据量较大时,为了避免程序的阻塞,可以考虑使用线程来进数据的读取和处理,使得界面可以同时进其他操作,提高用户体验。 综上所述,当需要在QTableView显示百万数据时,为了保证程序运效率和用户体验,我们需要采用分页读取、更换模型、视图的优化以及使用线程等方法来进优化。 ### 回答3: QTableView是一个基于模型-视图模式的控件,可以显示数据模型的任何部分,并随着数据变化自动更新。但如果数据量非常大,可以导致性能问题,因此,显示百万数据QTableView需要进优化。 一种优化方法是使用QSqlTableModel或QSqlQueryModel。这些模型允许在需要时从数据库加载数据,并且只在请求时将其添加到视图中。此外,可以使用分页技术将数据分成小批量加载。这种方法需要使用QSqlDatabase进连接到数据库,所以需要同时在TableView和数据库中进优化。 另一种优化方法是采用后台线程。可以使用QThread或QThreadPool构建后台线程,并将其用于数据库查询和加载数据。这样,可以在后台线程中加载数据,避免造成主线程的阻塞。在数据加载后,可以使用信号和槽机制来将数据展示到QTableView中,以此提高程序的响应速度。 另外,如果数据只读取一次,可以将数据预先加载到内存中,使用QStandardItemModel将数据直接设置到QTableView中。这种方法可以避免数据库连接、查询和加载数据带来的性能开销;但如果内存不足,会导致程序崩溃。 综上所述,QTableView显示百万数据需要进性能优化,采用了QSqlTableModel或QSqlQueryModel、使用后台线程以及将数据预先加载到内存中等方法,可以在提高程序响应速度的同时保持程序的稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值