我想在Qt中有一个表格视图,标题文本将在垂直方向:
要么像绿色方块一样,要么像红色一样?
答案 0 :(得分:2)
您可以通过提供自己的QHeaderView
实现来实现这一目标。这是一个示例实现,它覆盖了paintSection
方法以垂直绘制文本。
class MyHeaderView(QtWidgets.QHeaderView):
def __init__(self, parent=None):
super().__init__(Qt.Horizontal, parent)
self._font = QtGui.QFont("helvetica", 15)
self._metrics = QtGui.QFontMetrics(self._font)
self._descent = self._metrics.descent()
self._margin = 10
def paintSection(self, painter, rect, index):
data = self._get_data(index)
painter.rotate(-90)
painter.setFont(self._font)
painter.drawText(- rect.height() + self._margin,
rect.left() + (rect.width() + self._descent) / 2, data)
def sizeHint(self):
return QtCore.QSize(0, self._get_text_width() + 2 * self._margin)
def _get_text_width(self):
return max([self._metrics.width(self._get_data(i))
for i in range(0, self.model().columnCount())])
def _get_data(self, index):
return self.model().headerData(index, self.orientation())
您可以在视图中使用此类,如下所示:
headerView = MyHeaderView()
tableView.setHorizontalHeader(headerView)
它将产生以下视图:
作为附注,我想补充一点,对于常规项目,您宁愿提供自己的项目委托。但是,正如Qt documentation:
中所述每个标题呈现每个部分本身的数据,并且确实如此 不依赖代表。结果,调用标题 setItemDelegate()函数将无效。