如何将小部件的大小和位置自动调整到 QTreeWidget 中的单元格?

How to autofit widget size and position to a cell in QTreeWidget?

我按语法创建了一个 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 的单元格吗?

P.S。在调整树的大小(按宽度或 expand/collapse 节点调整大小)后,小部件会正确更新。

您可以尝试 adding/updating 将小部件作为项目,例如:

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);

或者只用小部件填充树

考虑到QTreeWidget调整大小后自动调整开始,里面有一些方法可以调整单元格中的小部件的大小。 因此,我打开了 QTreeWidget 描述 (https://doc.qt.io/qt-5/qtreewidget.html) 并将所有 Public 函数 Public 插槽 都设为红色。当我没有找到任何有用的函数时,我查看了父 class (QTreeView)。并找到

myTree->resizeColumnToContent(0);

调整 QTreeWidget 中任何行的大小后调用 resizeColumnToContent,小部件将始终适合单元格。

P.S。我是OP