向QTreeView添加垂直页眉 [英] Adding Vertical headers to a QTreeView

查看:18
本文介绍了向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添加垂直页眉的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆