本文介绍了向QTreeView添加垂直页眉的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个QTreeView
子类(和QAbstractItemModel
子类),它有一个很好的水平标题。我想添加垂直标题(沿着左侧)以匹配。但与QTableView
不同,QTableView
有单独的垂直(setVerticalHeader()
)和水平标题(setHorizontalHeader()
),QTreeView
只允许一个标题(setHeader()
)。
我知道我只需要假装最左边的列是标题,并用不同的背景颜色呈现它(我不需要调整行大小或重新排列行的能力,所以我不需要实现任何这些特殊行为)。但这并没有考虑到当地的风格。例如,在我的系统上,页眉有轻微的倾斜,使它们看起来几乎是3D的。
因此,我正在寻找一种方法来添加适当的垂直页眉(我猜它将是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);
负责所需单元格的Paint事件的最简单方法是创建自定义项委托并重新实现virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0
方法。您只需将您的绘制与您关心的索引关联起来,并将其余部分传递给超类(请参阅Qt的文档以了解此类)。 这篇关于向QTreeView添加垂直页眉的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!