2016-12-27 4 views

답변

0

당신의 문제에 대한 해결책은 QHeaderView에서 취득한 constant_offset 값으로 세로 스크롤 막대의 위치를 ​​설정 할 수 있습니다 (: 스크롤 바의 높이가 QTreeView의 높이를 뺀 아래의 그림과 같이 헤더의 height.just 동일).

는 서브 클래스에 의해 수행 될 수 QTreeView과 같이 :

class MyTreeView : public QTreeView 
{ 
public: 
    MyTreeView(QWidget* parent = nullptr): QTreeView(parent){} 

    void updateVertScrollBar() 
    { 
     auto* ptr = verticalScrollBar(); 
     QRect rect = ptr->geometry(); 
     rect.setTop(header()->height()); 
     ptr->setGeometry(rect); 
    } 

    void resizeEvent(QResizeEvent* ev) override 
    { 
     QTreeView::resizeEvent(ev); 
     updateVertScrollBar(); 
    } 
}; 

데이터가 가득하거나 샘플 구현에 제시된 업데이트가 각각 발생할 수 있습니다 직후 호출 할 수있는 sizePolicyupdateVertScrollBar 방법에 따라 resizeEvent - 위젯에 수행되는 다양한 크기 조정을 포함해야합니다.

편집

또한 까다로운 일이 될 것이다 수축 된 스크롤에서 왼쪽 빈 공간을 제거. 먼저 QTreeView이 뷰포트 위젯과 스크롤바 (다른 것들 중에서)로 만들어 졌다는 것을 나타냅니다. 이제 볼 수있는 문제는 뷰포트와 수직 스크롤 막대 너비 (보이는 경우)가 일치해야하며 내부적으로 계산된다는 사실에서 비롯됩니다.

필자는 이러한 구성 요소의 크기를 강제로 늘리려고 할 때 많은 일이 일어나기 때문에 까다 롭다고 말했습니다. 일부 업데이트는 내부에서 호출되며 일부는 이벤트 루프를 통해 호출됩니다. this을 확인하면 개념에 대한 자세한 정보를 얻을 수 있습니다. 유사한 접근법이 아마도 QTreeView에 적용됩니다.

기본적으로 뷰포트 너비를 늘리는 것이 필요합니다. 이것은 아마도 resizeEvent 동안 완료되어야합니다. 그러나 viewport()->setGeometry()과 같은 메소드를 호출하면 잘 끝나지 않을 수 있습니다. 루프에 걸릴 수 있습니다. 시도해보십시오 blockSignals하지만 도움이 될지 모르겠습니다. 일반적으로 주어진 Qt 위젯의 내부를 엉망으로 만들고 싶다면 최소한 간단히 구현해야합니다.

+0

이 작업을 수행 할 수 있지만 헤더 너비가 스크롤 막대 너비와 동일한 빈 간격이 있습니다. 어떻게 헤더에서 빈 간격을 제거 할 수 있습니까 ?? – Lomuto

+0

겪고있는 것을 보여주는 이미지를 붙여 넣습니다. 스크롤 바 주위의 관심 영역만으로도 충분합니다. – Dusteh

+0

[이처럼] (https://1drv.ms/i/s!AuRlDm0ORHE_hN4McM_n9FAw1_8S8w) – Lomuto

관련 문제