resizeColumnToContent在自定义模型和委托下无法工作
我正在使用QTreeView来显示一个自定义模型,里面有4列。这个基本上是可以工作的,但我就是无法让resizeColumnToContent这个功能正常运作。
我试过这个:
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()里返回一个大小。但这不太可能,因为每个单元格的实际文本或内容是在代理中确定的,而不是在模型里。
另一个猜测是直接在代理的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在其他地方的布局都运作得很好,这个问题真的是很奇怪。
1 个回答
0
我遇到了同样的问题,最后发现是我在自定义模型中设置了 SizeHintRole
。
def data(self, index, role):
...
if role == QtCore.Qt.SizeHintRole:
return QtCore.QSize(-1, 22)
在这里,我试图给所有行设置一个固定的垂直大小,结果也影响到了宽度。我不确定你的情况是不是这样,但我建议你检查一下你的 data()
定义(或者甚至 headerData()
)。