我有一个 QTreeView 亚类(和 QAbstractItemModel 子类),其中有一个漂亮的水平头。我想添加垂直的标题(下去左边)相匹配。但是不像 QTableView 它具有单独的垂直的(setVerticalHeader())和水平的标题(setHorizontalHeader()), QTreeView 只允许一个单一的标题(setHeader()).

我知道,我只是假装的最左栏的标题,并使其具有不同的背景的颜色(我不需要的能力来调整或重新安排行的,所以我不会有执行任何这些特殊的行为).但是,这并不考虑到当地的风格。例如,在我的系统的标题有一个轻微的梯度,给他们一个几乎3D看看。

因此,我在寻找一种方式添加一个适当的垂直header(我猜这将是一个子类的 QHeaderView)或其他呈现一个标题下的最左边的柱,但是呈现它的正确方法。

有帮助吗?

解决方案

你也许是对的,你会需要"假装",但是你应该能够借鉴它看作为良好作为你的水平的标题。

什么你需要做的就是负责的 paintEvent 对于那些细胞,然后利用当前的风格来画出一个自定义的控制。是这样的:

//QWidget* w is the widget who's style you want
QPainter painter(this);
QStyleOptionHeader opt;
opt.initFrom(this);
opt.state = QStyle::State_None;
opt.orientation = Qt::Vertical;
opt.state |= QStyle::State_Vertical;
if (w->isEnabled())
    opt.state |= QStyle::State_Enabled;
opt.state |= QStyle::State_Active;
w->style()->drawControl(QStyle::CE_Header, &opt, &painter, w);

最简单的方式是负责的一个油漆的事件的细胞你想要的是创建一个定制的项目代表和重新实现的 virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0 法。你只门你绘画的索引你的关心,并通过其余的超级类(见建的医用于这类)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top