resizeColumnToContent不能与自定义模型和委托一起工作

resizeColumnToContent not working with custom model and delegate

本文关键字:一起 工作 模型 不能 自定义 resizeColumnToContent      更新时间:2023-10-16

我使用QTreeView在4列中显示自定义模型。这基本上工作,但我只是不能得到resizeColumnToContent工作。

I tried this

ui->treeSkills->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
ui->treeSkills->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
ui->treeSkills->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
ui->treeSkills->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents);

:

ui->treeSkills->resizeColumnToContents(0);
ui->treeSkills->resizeColumnToContents(1);
ui->treeSkills->resizeColumnToContents(2);
ui->treeSkills->resizeColumnToContents(3);

设置数据之前和之后。

一种猜测是,当请求某个角色时,我可能必须在model::data()中返回一个size。但这是不可能的,因为每个单元格的实际文本/内容是在委托中确定的,而不是在模型中。

另一种猜测是在paint()中的委托中改变矩形的大小,就像这样:

options.rect.setWidth(options.rect.width() * 2);
p_painter->save();
p_painter->setClipRect(options.rect);
drawBackground(p_painter, options, p_index);
drawDisplay(p_painter, options, options.rect, text);
drawFocus(p_painter, options, options.rect);
p_painter->restore();

但是,还是没有什么变化。

有什么办法吗?考虑到布局在Qt的其他地方工作得很好,这真的很奇怪,这是这样一个问题。

遇到了同样的问题,它最终是我在自定义模型中设置SizeHintRole:

def data(self, index, role):
  ...
  if role == QtCore.Qt.SizeHintRole:
     return QtCore.QSize(-1, 22)

在这里,我试图为所有行设置一个固定的垂直大小,它最终也搞乱了宽度。不确定这是否与您的情况相同,但我建议查看您的data()定义(甚至headerData())。