2016-11-05 62 views
1

我有一個包含項目列表的XML響應。每個項目都包含另一個子項目列表。我能夠成功地將其轉換爲QML中的模型,但我在列出列表列表時遇到問題。ListView ListView列中的列或QML處理列表的列表

我想渲染項目列表爲 s,每個都有它們的標題;以及水平附加爲Column的子項列表到其對應的。看起來這應該是每個使用ListView這些組件的QML文檔很容易,但我遇到了兩個問題:

  • 子項Column會針對的「稱號」 Column疊加
  • 只顯示第一個子項,其餘的被忽略

這裏的相對最小QML(可以用qmlscene運行)重現:

import QtQuick 2.5 

ListView { 
    width: 640 
    height: 480 

    model: ListModel { 
     ListElement { title: "title 1" } 
     ListElement { title: "title 2" } 
    } 

    delegate: Row { 
     width: parent.width 
     Text { 
      text: title 
      elide: Text.ElideRight 
     } 
     ListView { 
      orientation: ListView.Horizontal 
      model: ListModel { 
       ListElement { name: "name 1"; description: "desc 1" } 
       ListElement { name: "name 2"; description: "desc 2" } 
      } 
      delegate: Column { 
       Text { text: "name: " + name + "; desc: " + description } 
      } 
     } 
    } 
} 

預期輸出是:

title 1 name: name 1; desc: desc1 name: name 2; desc: desc 2 
title 2 name: name 1; desc: desc1 name: name 2; desc: desc 2 

我使用的是在一個錯誤的地方ListView?還是有其他組件我應該用來實現預期的結果?

回答

1

你可能不是故意使用嵌套的垂直列表視圖?這將是次優的可用性。

import QtQuick 2.5 

ListView { 
    width: 640 
    height: 480 

    model: ListModel { 
     ListElement { title: "title 1" } 
     ListElement { title: "title 2" } 
    } 

    delegate: Row { 
     width: parent.width 
     Text { 
      text: title 
      width: 100 
      elide: Text.ElideRight 
     } 
     Column { 
      Repeater { 
       model: ListModel { 
        ListElement { name: "name 1"; description: "desc 1" } 
        ListElement { name: "name 2"; description: "desc 2" } 
       } 
       delegate: Column { 
        Text { text: "name: " + name + "; desc: " + description } 
       } 
      } 
     } 
    } 
} 
+0

這個工作可視化(我刪除外'Column' - 因爲我想要子行水平附加到行)。但是,AFAICT與「ListView」的區別在於,如果內容太寬,它可以滾動,因爲它實現了「Flickable」,但使用「Repeater」它只會在屏幕上消失。是的,我從這篇文章中得到了使用嵌套'ListView'的想法 - http://www.mail-archive.com/[email protected]/msg00808.html。那麼這是一個錯誤?它是否也適用於'ListView'(或'GridView')? –

+0

所以你的意思是使嵌套ListView水平?至少,你應該給它一個尺寸。鄰居列中孤獨的Text元素也是如此。默認情況下,它只會展開爲符合文本所需的任何內容(隱式大小)。 – jpnurmi

+0

不幸的是,添加顯式大小和方向不會改變行爲。該列表仍然從「行」的最左側位置開始,疊加在「標題」列的頂部,仍然只顯示第一個項目。 –