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

时间:2019-04-01 11:58:59

标签: qt delegates qtablewidget qtreewidget

我实用地创建了一个QTreeWidget。

然后,我实用地添加一些项目。

然后我通过

将两个QLabel小部件添加到两个项目(QTreeWidgetItem)中
Traceback (most recent call last) :
File "<pyshell#4>", Line 1, in <module>
t.forward(50)
AttributeError: 'dict' object has no attribute 'forward' 

然后我尝试以实用的方式调整项目行的大小。 如果我使用

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

该行混乱了。但是myLabel1不是。

如果我使用

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

一切正常,但myLabel2的行未按位置调整为标签。

我可以做一些事情来自动将小部件(按大小和位置)调整到QTreeWidget的单元格吗?

P.S。在调整树的大小(按宽度或扩展/折叠节点的大小)后,小部件将正确更新。

2 个答案:

答案 0 :(得分:0)

您可以尝试将小部件添加/更新为项目,例如:

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

或者只用小部件填充树

答案 1 :(得分:0)

鉴于自动调整功能是在调整QTreeWidget的大小之后开始的,因此内部有些方法可以调整单元格中的Widget大小。 因此,我打开了QTreeWidget描述(https://doc.qt.io/qt-5/qtreewidget.html),并将所有公共功能公共插槽全部涂成红色。当我找不到任何有用的函数时,我查看了一个父类(QTreeView)。并找到

myTree->resizeColumnToContent(0);
在调整QTreeWidget中的任何行的大小后,

调用 resizeColumnToContent ,窗口小部件将始终适合单元格。

P.S。我是OP。