2016-12-27 45 views
0

就像所描述的標題,當我重繪QTreeView中有一個標題(QHeaderView)的滾動條,但滾動條的高度是QTreeView的整個高度,我想讓滾動條的高度等於QTreeView則的高度減去頭的height.just像下面的圖片: just like this, exclude the height of header如何指定QTreeView中滾動條的高度

回答

0

用於您的問題的解決方案可能會垂直滾動條的位置設置從QHeaderView取得的constant_offset值(y軸上)。

這可以通過繼承來完成的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