更改 QTableView 中的文本方向 header
Changing text direction in QTableView header
我想在 Qt 中有一个 table 视图,其中 header 文本将沿垂直方向显示:
喜欢绿色方块还是喜欢红色方块?
您可以通过提供自己的 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())
您可以在您的视图中使用此 class,如下所示:
headerView = MyHeaderView()
tableView.setHorizontalHeader(headerView)
它会产生以下视图:
作为旁注,我想为常规项目添加一点,您宁愿提供自己的项目委托。但是,如 Qt documentation:
中所述
Each header renders the data for each section itself, and does
not rely on a delegate. As a result, calling a header's
setItemDelegate() function will have no effect.
我想在 Qt 中有一个 table 视图,其中 header 文本将沿垂直方向显示:
喜欢绿色方块还是喜欢红色方块?
您可以通过提供自己的 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())
您可以在您的视图中使用此 class,如下所示:
headerView = MyHeaderView()
tableView.setHorizontalHeader(headerView)
它会产生以下视图:
作为旁注,我想为常规项目添加一点,您宁愿提供自己的项目委托。但是,如 Qt documentation:
中所述Each header renders the data for each section itself, and does not rely on a delegate. As a result, calling a header's setItemDelegate() function will have no effect.