Определить видимый размер столбца QTreeWidget - PullRequest
1 голос
/ 18 марта 2020

Мне нужно определить VISIBLE ширину столбца в QTreeWidget.

Я объясню мою проблему на небольшом примере.

QTreeWidget определяет три столбца с фиксированной шириной столбец 1 = 200 пикселей, столбец 2 = 100 пикселей и столбец 3 = 300 пикселей. Ширина самого виджета (изменяемого размера) составляет 350.

Ширина всех столбцов (200 + 100 + 300 = 600) превышает значение виджета, поэтому отображается полоса прокрутки.

Для некоторых специальных вычислений мне нужно знать видимую ширину третьего столбца:

Calculate visible column width

Случай A будет довольно простым, мне просто нужно вычесть : widget - col 1 - col2 = 350 - 200 - 100 = 50.

Но что мне делать в случае B? Чтобы вычислить видимую ширину столбца 3, мне нужно знать видимую ширину столбца 1.

Есть ли определенный способ определения видимой ширины столбца?

Спасибо, Сёрен

Аддон:

Меня спросили с целью моего вопроса. В нашем программном обеспечении у нас есть своего рода функция осциллографа. Хотя большинство записанных значений являются числами (с единицами измерения), некоторые из наших источников данных содержат другие типы информации.

Структура страницы в основном структурирована таким образом, что имеется графическое представление и QTreeWidget с отображением значений, которые можно изменять в их отношении друг к другу с помощью разделителей.

QTreeWidget содержит несколько столбцов, последний столбец представляет фактическое записанное значение.

Столбец ширина автоматически подстраивается под содержимое, чтобы пользователю не приходилось постоянно корректировать ширину столбца.

Теперь отображение в столбце значений должно быть выровнено по правому краю. Но если текст там очень длинный, оставшиеся измеренные значения справа исчезают в нирване, и вы должны сделать QTreeWidget очень широким, чтобы снова увидеть значения:

Oscar screenshot with wide value text

Идея теперь состоит в том, чтобы отображать значения, выровненные по правому краю, только если они полностью вписываются в видимую в данный момент область столбца, и начать выравнивание по левому краю в противном случае. Выравнивание не выровнено по правому краю столбца, но выровнено по правому краю с видимой областью:

Desired Text Alignment

Поэтому сначала я настраиваю все элементы по левому краю , Я перезаписываю метод

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

и проверяю, помещается ли отображаемый текст в видимую область (используя QFontMetrics в apPainter).

Если это так, то ширина экрана текст даже меньше видимой ширины, я добавляю достаточно свободного места, чтобы текст всегда выравнивался по правому краю в видимой области столбца.

В настоящее время я помогаю себе с полосой прокрутки, вычисляя ширину документа , положение ползунка, ширина QTreeView и его ширина отдельных столбцов, которая работает достаточно хорошо. Но я все еще ищу элегантное решение.

1 Ответ

1 голос
/ 18 марта 2020

Вы можете попробовать QAbstractItemView :: visualRect () - он дает вам координаты относительно области просмотра.

...