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

Qml 从Qt Quick中的文件夹中读取n个随机文件,qml,qt-quick,Qml,Qt Quick,我正在编写我的第一个Qt Quick应用程序,在其他环境中做简单的事情时遇到了很多困难。我想显示文件夹中的n个随机图像。为此,我使用FolderListModel,但问题是我没有看到任何直接访问文件列表的方法。下面是我的黑客方法: 使用FolderListModel读取文件 使用文本组件作为委托 ContextChanged of Text组件获取文件名(此部分有效)并将其添加到某个ListModel中 将ListModel随机化,然后使用它显示文件 我有很多问题,但首先,做这件事的明智方法

我正在编写我的第一个Qt Quick应用程序,在其他环境中做简单的事情时遇到了很多困难。我想显示文件夹中的n个随机图像。为此,我使用FolderListModel,但问题是我没有看到任何直接访问文件列表的方法。下面是我的黑客方法:

  • 使用FolderListModel读取文件
  • 使用文本组件作为委托
  • ContextChanged of Text组件获取文件名(此部分有效)并将其添加到某个ListModel中
  • 将ListModel随机化,然后使用它显示文件
我有很多问题,但首先,做这件事的明智方法是什么(请使列表部分不必用c++编写)

现在有两个问题-我不知道如何从文本组件访问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
      }
}

你的代码几乎适合我。我得到错误“qmlistmodel:append:value不是对象”。这是因为您附加了数组。 如果您拆下一行中的支架

anotherModel.append([{name: intext.text}]) 
它起作用了。要使anotherModel成为公共属性,请将其写为

property ListModel anotherModel: ListModel {}

谢谢这几乎奏效了。我不得不将行更改为:parent.parent.anotherModel.append({name:intext.text})奇怪。应该是这样的。如果您想要一个没有父级的解决方案,只需向ListView添加一些ID(比如ID:myFolderList),然后使用该ID引用列表模型(比如myFolderList.anotherModel.append(…)。