【问题标题】:resizeColumnToContent not working with custom model and delegateresizeColumnToContent 不适用于自定义模型和委托
【发布时间】:2022-04-11 06:51:28
【问题描述】:

我正在使用 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 的其他任何地方都运行良好,这真是一个奇怪的问题。

【问题讨论】:

    标签: python c++ qt pyqt


    【解决方案1】:

    遇到了同样的问题,结果我在自定义模型中设置了SizeHintRole

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多