2024-09-28 16:23:32 发布
网友
不幸的是,QTableView.resizeRowsToContents()只设置当前填充TableView的行(或项)的高度。使用第一个model的reset()或更新QTableView的行高度开关返回到某个默认值(看起来大约是32px高)。 大多数时候,这个默认的行高是不必要的高,留下了大量宝贵的屏幕空间未被填充。 如何将更改永久应用于行高?在
QTableView.resizeRowsToContents()
TableView
model
QTableView
我发现了两种永久设置行高的方法,要么在模型中使用sizeHintle,要么在QStyledItemDelegate中实现sizeHint方法。代码如下所示:
from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys class ListModel(QAbstractListModel): def __init__(self, data=[], parent=None): QAbstractListModel.__init__(self, parent) self.data = data def rowCount(self, parent=None): return len(self.data) def data(self, index, role=None): if role == Qt.DisplayRole: row = index.row() value = self.data[row] return value # ==============Comment if you're using delegate=============== if role == Qt.SizeHintRole: return QSize(100, 75) # ============================================================= class ListDelegate(QStyledItemDelegate): def __init__(self, parent=None): QStyledItemDelegate.__init__(self, parent) def sizeHint(self, option, index): return QSize(100, 20) app = QApplication(sys.argv) listview = QListView() model = ListModel([12, 15, 19]) listview.setModel(model) # =============uncomment to use delegate===================== # delegate = ListDelegate() # listview.setItemDelegate(delegate) # ============================================================ listview.show() sys.exit(app.exec_())
我发现了两种永久设置行高的方法,要么在模型中使用sizeHintle,要么在QStyledItemDelegate中实现sizeHint方法。代码如下所示:
相关问题 更多 >
编程相关推荐