c++ - 确定 QTreeWidget 列的可见大小

标签 c++ qt qtreewidget

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

我将用一个小例子来解释我的问题。

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

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

对于一些特殊的计算,我需要知道第三列的可见宽度:

Calculate visible column width

案例 A 很简单,我只需要减去:widget - col 1 - col2 = 350 - 200 - 100 = 50。

但是如果是B,我该怎么办?要计算 col 3 的可见宽度,我需要知道 col 1 的可见宽度。

是否有指定的方法来确定列的可见宽度?

谢谢,索伦

插件:

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

页面的布局基本上是这样构造的,即有一个图形 View 和一个带有值显示的 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)。

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

目前,我通过计算文档宽度、 slider 位置、QTreeView 的宽度及其各个列的宽度来帮助自己使用滚动条,这非常有效。
但我仍在寻找一个优雅的解决方案。

最佳答案

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

关于c++ - 确定 QTreeWidget 列的可见大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60743915/

相关文章:

c++ - 最短路径加权矩阵

c++ - Maya C++ API 是否根本不允许访问某些工具?

c++ - QTreeWidgetItem : How can I get the selected item?

qt - 为 QTreeWidget 设置列宽

qt - QNetworkReply 等待完成

python - 暂时抑制 PyQt 事件?

c++ - 如何将运行参数添加到 Netbeans 中的 C++ 项目

c++ - Xlib:关闭窗口总是导致致命的 IO 错误?

java - Qt 嵌入式动画的最佳选择?

c++ - 部署的Qt应用程序QtWebEngineProcess无法加载Qt5Core.dll