从Qt Quick中的文件夹中读取n个随机文件

时间:2011-07-28 21:18:52

标签: qml qt-quick

我正在编写我的第一个Qt Quick应用程序,而且在其他环境中执行简单的操作时遇到了很多麻烦。我想从文件夹中显示n个随机图像。为此我正在使用FolderListModel,但问题是我没有看到任何直接访问文件列表的方法。所以这是我的hackish方法:

  • 使用FolderListModel读取文件
  • 将文本组件用作代理
  • onTextChanged of Text组件获取文件名(此部分有效)并将其添加到某个ListModel
  • 随机化ListModel,然后使用它来显示文件

我有很多问题和疑问,但首先,做到这一点的理智方法是什么(请填写以便列表部分不必用c ++编写)?

现在有两个问题 - 我无法弄清楚如何从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
      }
}

1 个答案:

答案 0 :(得分:2)

您的代码几乎适合我。我收到错误“QML ListModel:append:value is not object”。这是因为您追加数组。 如果删除行

中的括号
anotherModel.append([{name: intext.text}]) 

它有效。要使另一个模型成为公共属性,请将其写为

property ListModel anotherModel: ListModel {}