Мне нужно определить VISIBLE ширину столбца в QTreeWidget.
Я объясню мою проблему на небольшом примере.
QTreeWidget определяет три столбца с фиксированной шириной столбец 1 = 200 пикселей, столбец 2 = 100 пикселей и столбец 3 = 300 пикселей. Ширина самого виджета (изменяемого размера) составляет 350.
Ширина всех столбцов (200 + 100 + 300 = 600) превышает значение виджета, поэтому отображается полоса прокрутки.
Для некоторых специальных вычислений мне нужно знать видимую ширину третьего столбца:
![Calculate visible column width](https://i.stack.imgur.com/wo62g.png)
Случай A будет довольно простым, мне просто нужно вычесть : widget - col 1 - col2 = 350 - 200 - 100 = 50.
Но что мне делать в случае B? Чтобы вычислить видимую ширину столбца 3, мне нужно знать видимую ширину столбца 1.
Есть ли определенный способ определения видимой ширины столбца?
Спасибо, Сёрен
Аддон:
Меня спросили с целью моего вопроса. В нашем программном обеспечении у нас есть своего рода функция осциллографа. Хотя большинство записанных значений являются числами (с единицами измерения), некоторые из наших источников данных содержат другие типы информации.
Структура страницы в основном структурирована таким образом, что имеется графическое представление и QTreeWidget с отображением значений, которые можно изменять в их отношении друг к другу с помощью разделителей.
QTreeWidget содержит несколько столбцов, последний столбец представляет фактическое записанное значение.
Столбец ширина автоматически подстраивается под содержимое, чтобы пользователю не приходилось постоянно корректировать ширину столбца.
Теперь отображение в столбце значений должно быть выровнено по правому краю. Но если текст там очень длинный, оставшиеся измеренные значения справа исчезают в нирване, и вы должны сделать QTreeWidget очень широким, чтобы снова увидеть значения:
Идея теперь состоит в том, чтобы отображать значения, выровненные по правому краю, только если они полностью вписываются в видимую в данный момент область столбца, и начать выравнивание по левому краю в противном случае. Выравнивание не выровнено по правому краю столбца, но выровнено по правому краю с видимой областью:
![Desired Text Alignment](https://i.stack.imgur.com/W7lsQ.png)
Поэтому сначала я настраиваю все элементы по левому краю , Я перезаписываю метод
void drawRow( QPainter * apPainter
, const QStyleOptionViewItem & arceOption
, const QModelIndex & arcIndex
) const override;
и проверяю, помещается ли отображаемый текст в видимую область (используя QFontMetrics в apPainter).
Если это так, то ширина экрана текст даже меньше видимой ширины, я добавляю достаточно свободного места, чтобы текст всегда выравнивался по правому краю в видимой области столбца.
В настоящее время я помогаю себе с полосой прокрутки, вычисляя ширину документа , положение ползунка, ширина QTreeView и его ширина отдельных столбцов, которая работает достаточно хорошо. Но я все еще ищу элегантное решение.