如何永久设置QListView行高度

2024-09-28 16:23:32 发布

您现在位置:Python中文网/ 问答频道 /正文

不幸的是,QTableView.resizeRowsToContents()只设置当前填充TableView的行(或项)的高度。使用第一个model的reset()或更新QTableView的行高度开关返回到某个默认值(看起来大约是32px高)。 大多数时候,这个默认的行高是不必要的高,留下了大量宝贵的屏幕空间未被填充。 如何将更改永久应用于行高?在


Tags: model高度屏幕空间reset行高tableviewqtableview
1条回答
网友
1楼 · 发布于 2024-09-28 16:23:32

我发现了两种永久设置行高的方法,要么在模型中使用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_())

相关问题 更多 >