2012-07-02 67 views
4

我想突出顯示ListView中當前選定的項目。以下是我正在使用的代碼;出於某種原因,儘管類似的代碼在此應用程序的另一個ListView中完美工作,但此時SelectedRectangle項目永遠不會顯示,儘管所選項目在它應該時會發生更改。ListView突出顯示的項目不顯示

Rectangle { 
    id: deviceTree 
    width: (window.width * 2)/3 
    height: 400 

    border { 
     width: 2 
     color: "black" 
    } 

    ListView { 
     id: deviceTreeView 

     model: deviceTreeModel 
     delegate: deviceTreeDelegate 
     highlight: SelectionRectangle {} 

     anchors.fill: parent 
     anchors.margins: 6 
    } 

    Component { 
     id: deviceTreeDelegate 

     Rectangle { 
      border.color: "#CCCCCC" 
      width: deviceTree.width 
      height: 30 

      smooth: true 
      radius: 2 

      MouseArea { 
       anchors.fill: parent 
       onClicked: { deviceTreeView.currentIndex = index; window.selectedDeviceChanged(deviceName) } 
      } 
     } 
    } 
} 

SelectedRectangle.qml

Rectangle 
{ 
    id: selectionRectangle 

    color: "lightsteelblue" 
    smooth: true 
    radius: 5 
} 

解決方案:在deviceTreeDelegate矩形默認情況下是白色和重疊的選擇矩形。使用該屬性設置爲透明,以便可以看到選擇。

回答

0

你的代碼獲得了兩個錯誤:

  1. 的亮點屬性的組件。組件類型的名稱與其定義的QML文件的名稱相同。您將其定義在名爲SelectedRectangle.qml的文件中,因此您必須在主QML文件中編寫highlight: SelectionRectangle {}
  2. 高亮顯示成員的類型爲Component。所以你爲這個成員使用的組件應該有一個繼承了Component的類型。或者您使用繼承Rectangle的QML組件,而Rectangle不會繼承Component。你應該把你的SelectedRectangle放在一個Component對象中,就像你爲委託做的一樣。

最後,你應該寫這樣的事情您亮點組件:

highlight: Component { 
    SelectedRectangle {} 
} 
+0

對不起,我的代碼中的命名是正確的,我錯誤地複製了它。另外,即使將矩形封閉在Component中也不起作用。 –

4

這是由於默認的矩形顏色爲白色,所彰顯的委託下堆放。將矩形顏色設置爲「透明」將允許突出顯示通過委託顯示。

+0

是的,這是問題:)非常感謝! –

+1

請將此答案標記爲已接受,如果它解決了您的問題。 – troyane