QtableView 根据数据库各列内容自适应调整 并撑满
时间: 2024-06-11 14:08:25 浏览: 160
Qt 自定义Tableview,根据内容调整列宽
5星 · 资源好评率100%
QTableView 可以通过设置各列的宽度模式(resizeMode)来自适应调整列宽。常用的列宽度模式有:
- QHeaderView::ResizeToContents:根据列内容自适应调整列宽。
- QHeaderView::Stretch:将剩余宽度平均分配给列。
为了让 QTableView 撑满父控件,可以设置 QTableView 的伸缩性属性(stretch)为 1,这样 QTableView 就会尽可能地占据父控件的空间。
例如,以下代码展示了如何将 QTableView 的各列自适应调整并撑满父控件:
```python
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
app = QApplication([])
window = QMainWindow()
table_view = QTableView(window)
# 创建数据库连接
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('test.db')
db.open()
# 创建数据模型并设置列宽度模式
model = QSqlTableModel()
model.setTable('test_table')
model.select()
for col in range(model.columnCount()):
table_view.horizontalHeader().setSectionResizeMode(col, QHeaderView.ResizeToContents)
# 设置伸缩性属性
table_view.horizontalHeader().setStretchLastSection(True)
table_view.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
table_view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
table_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
# 设置数据模型
table_view.setModel(model)
window.setCentralWidget(table_view)
window.show()
app.exec_()
```
在上述代码中,我们首先创建了一个 QTableView,并创建了一个 QSqlTableModel 作为数据模型。在设置数据模型后,我们循环遍历了各列,并将每列的宽度模式设置为 QHeaderView::ResizeToContents。接着,我们设置了 QTableView 的伸缩性属性为 1,并将其放置到 QMainWindow 的中央。最后,我们显示了 QMainWindow。 注意,设置 QTableView 的伸缩性属性为 1 后,QTableView 会尽可能地占据父控件的空间,如果需要显示滚动条,需要使用 setSizePolicy 和 setVerticalScrollBarPolicy、setHorizontalScrollBarPolicy 方法设置 QTableView 的尺寸策略和滚动条策略。
阅读全文