确定QTreeWidget列的可见大小

问题描述 投票:1回答:1

我需要确定QTreeWidget中列的可见宽度。

我将通过一个小例子来说明我的问题。

QTreeWidget定义了三列,其固定宽度为col 1 = 200 px,col 2 = 100 px和col 3 = 300 px。小部件本身的宽度(可调整大小)为350。

所有列的宽度(200 + 100 + 300 = 600)超过小部件的,因此显示了滚动条。

为了进行一些特殊的计算,我需要知道第三列的可见宽度:

Calculate visible column width

情况A会很容易,我只需要减去:小部件-col 1-col2 = 350-200-100 = 50。

但是在情况B下我该怎么办?要计算第3列的可见宽度,我需要知道第1列的可见宽度。

是否存在确定列的可见宽度的指定方法?

谢谢,索伦

Addon:

问我是为了我的问题。在我们的软件中,我们有一种示波器功能。尽管大多数记录的值都是数字(带有单位),但我们的某些数据源包含其他类型的信息。

页面的布局基本上是这样构造的,即有一个图形视图和一个带有值显示的QTreeWidget,可以使用分隔符改变它们之间的关系。

QTreeWidget包含几列,最后一列代表实际记录的值。

列宽会自动根据内容进行调整,因此用户不必经常校正列宽。

现在,值列中的显示应右对齐。但是,如果那里有很长的文本,那么右边的其余测量值会在必杀技中消失,您必须使QTreeWidget变宽才能再次看到这些值:

Oscar screenshot with wide value text

现在的想法是,仅当值完全适合列的当前可见区域时才显示右对齐的值,否则,将其开始左对齐。对齐方式不与列右对齐,但与可见区域右对齐:

Desired Text Alignment

因此,我首先将所有元素左对齐。我覆盖了方法

void drawRow( QPainter                   * apPainter
            , const QStyleOptionViewItem & arceOption
            , const QModelIndex          & arcIndex
            ) const override;

并检查显示文本是否适合可见区域(使用apPainter的QFontMetrics)。

如果是这种情况,并且显示文本的宽度甚至小于可见宽度,那么我会添加足够的可用空间,以使文本在列的可见区域中始终右对齐。

[目前,我通过计算文档宽度,滑块位置,QTreeView的宽度及其各个列的宽度来帮助自己使用滚动条,效果很好。但我仍在寻找一种优雅的解决方案。

c++ qt qtreewidget
1个回答
0
投票

您可以尝试QAbstractItemView::visualRect()-它为您提供相对于视口的坐标。

© www.soinside.com 2019 - 2024. All rights reserved.