2011-07-28 17 views
1

私は最初のQt Quickアプリケーションを書いていますが、私は他の環境では単純なことをするのに苦労しています。私はフォルダからn個のランダムな画像を表示したい。この目的のために、私はFolderListModelを使用していますが、問題は、ファイルのリストに直接アクセスする方法がないことです。だからここに私のハックのアプローチです:Qt Quickのフォルダからn個のランダムなファイルを読む

  • 使用FolderListModelがファイルに読み取るために
  • onTextChangedテキストコンポーネントのデリゲートとして
  • 使用テキストコンポーネントは、ファイル名(この部分の作品)を取得し、いくつかのListModel
  • ランダム化するために、それを追加します ListModelを使用してファイルを表示するには

私は多くの問題と疑問がありますが、まずこれを行うにはどうすればよいですか(リスト部分にはC++で書かれていますか?)

現在、2つの問題があります.TextコンポーネントからListModelにアクセスする方法を理解できません。 ListModelを画像を表示する別のコンポーネントからパブリック/アクセス可能にする方法を理解することはできません。以下は

コードです:

import QtQuick 1.0 
import Qt.labs.folderlistmodel 1.0 

ListView { 
    width: 200; height: 300 


    FolderListModel { 
     folder: "file:///C:/somefolder" 
     id: folderModel 
     nameFilters: ["*.jpg"] 
    } 

    Component { 
     id: fileDelegate 
     Text { id: intext 
       text: fileName 
       //the next line fails, Can't find variable: anotherModel 
       onTextChanged: anotherModel.append([{name: intext.text}] 
      ) 
     } 
    } 

    model: folderModel 
    delegate: fileDelegate 


    ListModel { 
      id: anotherModel 
     } 
} 

答えて

2

あなたのコードはほとんど私のために動作します。エラー "QML ListModel:append:value is not object"が表示されます。これは、配列を追加するためです。 ブラケットをラインで外すと、

anotherModel.append([{name: intext.text}]) 

が動作します。 anotherModelをpublicプロパティにするには、

property ListModel anotherModel: ListModel {} 
+0

と書いてください。これはほとんど動作します。私は行を次のように変更しなければなりませんでした:parent.parent.anotherModel.append({name:intext.text}) – Kaitnieks

+0

Strange。それはちょうどそのように動作するはずです。親を持たないソリューションが必要な場合は、ListView(id:myFolderListなど)にIDを追加し、そのIDを使用してリストモデル(myFolderList.anotherModel.append(...)など)を参照します。 – blakharaz

関連する問題