qt - 更改 QTableView 标题中的文本方向

标签 qt qtableview qtreeview

我想在 Qt 中有一个表格 View ,其中标题文本将沿垂直方向移动:

like this table in excel

是像绿色方 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 :

enter image description here

作为旁注,我想补充一点,对于常规项目,您宁愿提供自己的项目委托(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/

相关文章:

c++ - 段错误仅在发布配置下发生

c++ - QtOpenCl "undefined reference"报错

c++ - 在 QT 中创建我自己的模型

c++ - QTableView 列宽

c++ - Qt - 清除 QTableView 的内容

qt - QDir 信息已更改

c++ - 如何修复 Windows 上的 Qt 控制台输出(使用 `qInstallMsgHandler` 和 `qDebug` )?

python - QTableview指定标准搜索字段

python-3.x - QTreeView 只编辑第一列?

qt - 如何使用 QTreeView 和 QFileSystemModel 只显示包含特定文件的文件夹?