2016-11-29 163 views
0

我有一個簡單的頁面,在我的應用程序:QML的ListView間距毛刺

import QtQuick 2.5 
import QtQuick.Controls 2.0 

Page { 

    ListView { 
     anchors.fill: parent 
     model: 50 
     delegate: Item { 
      clip: true 
      height: 50 
      anchors { 
       left: parent.left 
       right: parent.right 
      } 

      Rectangle { 
       color: "red" 
       anchors.fill: parent 
      } 
      Label { 
       text: index 
      } 

     } 
    } 

} 

有時,當我在滾動,我看行之間的間距,但間距爲0。我想這是某種座標舍入錯誤。我追蹤了可能的問題來源 - 剪輯:在委託內部是真實的。如果我刪除它,那麼一切都很好。

這是Qt的錯誤,我該如何解決它?在代理的根節點至少不是 -

enter image description here

+0

紅色的背景會爲你解決;除此之外,你可以做的事情並不多,儘管這種特殊的情況並不需要裁剪。也許如果你發佈你的實際委託,我們可以想辦法隱藏這些工件。此外,性能似乎是一個因素,因爲在一臺速度很快的機器上,我幾乎看不到任何空間,完全不像您的情況。 – dtech

+0

@ddriver我在界限外拖動時看到空格。是的,背景可以解決這個問題,但我認爲這是最後的解決方案 –

+2

這是由臭名昭着的qml jiggies引起的 - 綁定鏈需要時間進行評估,有時它們不會在同一個框架中評估,導致jiggy/elastic僞像。在你的情況下,這可能是因爲紅色的矩形位置與委託項目不同步,導致它剪切矩形的一部分並顯示背後的白色背景。不,沒有什麼可以做,以防止它,至多你可以隱藏它。 – dtech

回答

0

ListView的pixelAligned(例如,通過ListView滾動)屬性完全解決了這個問題對我來說

的性能因素
ListView { 
    ... 
    pixelAligned: true 
    ... 
} 
1

如果只有那些毛刺 enabeling剪輯時,不要使用它。

Page { 
    ListView { 
     anchors.fill: parent 
     model: 50 
     delegate: Rectangle { 
      clip: false // <-- Do not clip in the delegate's root node 
      height: 50 
      color: "red" 
      anchors { 
       left: parent.left 
       right: parent.right 
      } 
      Item { 
       anchors.fill: parent 
       clip: true // <-- instead you might clip in a delegate's child node 
       Label { 
        text: index + 'a very long string that might be clipped at some point' 
       } 
      } 
     } 
    } 
} 

至少在我的電腦上顯示沒有那些毛刺。 但是我想嘗試不夾代表所有的,因爲裁剪是它可能具有的影響尤其是當物體移動

+0

它已經建立裁剪是原因,所以這並不真正添加任何內容。至於他爲什麼剪裁,我假設問題代碼只是一個例子,他的實際使用案例有一些有意義的剪輯。 – dtech

+0

這個答案有其想法。在大多數情況下,可以避免截取根代表項目 –