2015-01-30 2 views
3

불행히도 QTableView.resizeRowsToContents()은 현재 TableView을 채우는 행 (또는 항목) 만 높이를 설정합니다. 첫 번째 model의 reset() 또는 업데이트를 사용하면 QTableView의 행의 높이가 일부 기본값 (약 32px 높이)으로 다시 전환됩니다. 대부분의 경우이 기본 행 높이가 불필요하게 높기 때문에 많은 값 비싼 화면 공간이 채워지지 않습니다. 행 높이에 변경 사항을 영구적으로 적용하는 방법은 무엇입니까?QListView 행의 높이를 영구적으로 설정하는 방법

답변

2

행 높이를 영구히 설정하는 두 가지 방법을 찾았 으면 모델에서 SizeHintRole을 사용하거나 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_()) 
관련 문제