Как нарисовать связи между элементами в QTreeView - PullRequest
0 голосов
/ 16 мая 2018

Интересно, как нарисовать линии, соединяющие элементы в QTreeView, как показано на рисунке под Модель дерева . Моя программа будет работать на разных платформах и, следовательно, использовать разные стили. Могу ли я гарантировать, что предметы нарисованы по желанию?

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

enter image description here

1 Ответ

0 голосов
/ 16 мая 2018

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

Обратите внимание, что при использовании таблиц стилей QStyleSheetStyle запускается независимо от QStyle , которое ваше приложение использует в данный момент.Поэтому, если вы решите пойти по этому пути, вы переопределите внешний вид и контроль своего элемента управления одинаково, независимо от целевой платформы.

Если это проблема, вы можете рассмотреть возможность использования таблиц стилей только для определенных целей.платформ.В качестве примера:

#ifdef Q_OS_MAC
    myControl->setStyleSheet(":/my_stylesheet_for_mac.qss");
#endif

Возвращаясь к примеру в документации, он использует несколько изображений, содержащих все различные линии (вертикальные, горизонтальные, ветви и т. Д.) И субконтроль ::branch и его состояния дляопределите, какое изображение использовать.

Результат будет примерно таким:

result.

Очевидно, вы должны изменить код, чтобы показать картинку vline вместоСтрелки.

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

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

...