QTreeView / QHeaderView仅调整第一列的大小以进行拉伸和交互

时间:2016-08-05 05:50:46

标签: c++ qt

我有一个有5列的QTreeView。要求是仅拉伸第一列,但是所有5列都应该由用户调整大小(即,它们也可以是交互式的)。所以我写了下面的代码:

 int numCols = myModel->columnCount();
    for(int i=0;i<numCols;i++)
    {
       myQTreeView->resizeColumnToContents(i);
       if(i==0)
          {    
             myQTreeView->header()->setResizeMode(i,QHeaderView::Stretch);
          }
       else
          {  
             myQTreeView->header()->setResizeMode(i,QHeaderView::Interactive);
          }
     }

但这不符合第一栏的预期效果。虽然第一列延伸但是它不像其他列那样可调整大小/交互。因此,我想为第1列添加stretch + interactive。其余的4列也可能只是交互式的。 这可能吗?

1 个答案:

答案 0 :(得分:2)

根据QHeaderView::ResizeMode的{​​{3}},当模式设置为QHeaderView::Stretch时...

  

用户无法或以编程方式更改大小。

所以,不,我认为使用标准API无法实现您的目标。

您可以尝试将调整大小模式设置为QHeaderView::Custom,并通过在现有QHeaderView上安装事件过滤器或创建自己的类来覆盖QHeaderView中的各种鼠标事件处理程序继承自QHeaderView并通过QTreeView::setHeader在您的视图中安装该实例。