Как автоматически установить размер и положение виджета в ячейке в QTreeWidget? - PullRequest
0 голосов
/ 01 апреля 2019

Я прагматически создаю QTreeWidget.

Затем я прагматически добавляю некоторые предметы.

Затем я добавляю два виджета QLabel к двум элементам (QTreeWidgetItem) с помощью

myTree->setItemWidget(item1, 0, myLabel1);
myTree->setItemWidget(item2, 0, myLabel2);

И затем пытаюсь прагматически изменить размер строки элемента.Если я использую

item1->setSizeHint(0, QSize(myWidth, myHeight) );

, строка изменяется.Но myLabel1 - это не так.

Если я использую

item1->setSizeHint(0, QSize(myWidth, myHeight) );
myLabel->resize(myWidth, myHeight);

, то все в порядке, но строка myLabel2 неправильно настраивается на метку по позиции.

Можно ли что-то сделать дляавтоматическая настройка виджета (по размеру и положению) на ячейку QTreeWidget?

PS После любого изменения размера дерева (изменение размера по ширине или расширению / свертыванию) виджеты обновляются корректно.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Ввиду того, что автоподбор запускается после изменения размера QTreeWidget, в нем есть некоторый метод, который изменяет размеры виджетов в ячейках. Поэтому я открыл описание QTreeWidget (https://doc.qt.io/qt-5/qtreewidget.html) и выделил все Публичные функции и Публичные слоты . Когда я не нашел никакой полезной функции, я посмотрел на родительский класс (QTreeView ). И нашел

myTree->resizeColumnToContent(0);

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

P.S. Я ОП.

0 голосов
/ 01 апреля 2019

вы можете попробовать добавить / обновить виджет как элемент, например:

QWidget* wdg = new QWidget;
QPushButton* btIcon = new QPushButton();
QLabel* lb = new QLabel();
QHBoxLayout* layout = new QHBoxLayout(wdg);
layout->addWidget(btIcon);
layout->addWidget(lb);
layout->setAlignment( Qt::AlignCenter );
wdg->setLayout(layout);
myTree->setItemWidget(item1, 0, wdg);

или просто заполнить дерево виджетами

...