我想在 Qt 中有一个表格 View ,其中标题文本将沿垂直方向移动:
是像绿色方 block 还是像红色?
最佳答案
您可以通过提供您自己的 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())
您可以在 View 中使用此类,如下所示:
headerView = MyHeaderView()
tableView.setHorizontalHeader(headerView)
它将产生以下 View :
作为旁注,我想补充一点,对于常规项目,您宁愿提供自己的项目委托(delegate)。然而,正如 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 - 更改 QTableView 标题中的文本方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633020/