我需要确定QTreeWidget中列的可见宽度。
我将通过一个小例子来说明我的问题。
QTreeWidget定义了三列,其固定宽度为col 1 = 200 px,col 2 = 100 px和col 3 = 300 px。小部件本身的宽度(可调整大小)为350。
所有列的宽度(200 + 100 + 300 = 600)超过小部件的,因此显示了滚动条。
为了进行一些特殊的计算,我需要知道第三列的可见宽度:
情况A会很容易,我只需要减去:小部件-col 1-col2 = 350-200-100 = 50。
但是在情况B下我该怎么办?要计算第3列的可见宽度,我需要知道第1列的可见宽度。
是否存在确定列的可见宽度的指定方法?
谢谢,索伦
Addon:
问我是为了我的问题。在我们的软件中,我们有一种示波器功能。尽管大多数记录的值都是数字(带有单位),但我们的某些数据源包含其他类型的信息。
页面的布局基本上是这样构造的,即有一个图形视图和一个带有值显示的QTreeWidget,可以使用分隔符改变它们之间的关系。
QTreeWidget包含几列,最后一列代表实际记录的值。
列宽会自动根据内容进行调整,因此用户不必经常校正列宽。
现在,值列中的显示应右对齐。但是,如果那里有很长的文本,那么右边的其余测量值会在必杀技中消失,您必须使QTreeWidget变宽才能再次看到这些值:
现在的想法是,仅当值完全适合列的当前可见区域时才显示右对齐的值,否则,将其开始左对齐。对齐方式不与列右对齐,但与可见区域右对齐:
因此,我首先将所有元素左对齐。我覆盖了方法
void drawRow( QPainter * apPainter
, const QStyleOptionViewItem & arceOption
, const QModelIndex & arcIndex
) const override;
并检查显示文本是否适合可见区域(使用apPainter的QFontMetrics)。
如果是这种情况,并且显示文本的宽度甚至小于可见宽度,那么我会添加足够的可用空间,以使文本在列的可见区域中始终右对齐。
[目前,我通过计算文档宽度,滑块位置,QTreeView的宽度及其各个列的宽度来帮助自己使用滚动条,效果很好。但我仍在寻找一种优雅的解决方案。
您可以尝试QAbstractItemView::visualRect()-它为您提供相对于视口的坐标。