Чтение случайных файлов из папки в Qt Quick - PullRequest
1 голос
/ 29 июля 2011

Я пишу свое первое приложение Qt Quick, и у меня много проблем с выполнением простых задач в других средах.Я хочу отображать n случайных изображений из папки.Для этого я использую FolderListModel, но проблема в том, что я не вижу никаких методов для прямого доступа к списку файлов.Итак, вот мой хакерский подход:

  • Использование FolderListModel для чтения файлов
  • Использование компонента Text в качестве делегата
  • Компонент onTextChanged из Text получает имя файла (эта часть работает) идобавляет его к некоторой ListModel
  • , рандомизирует ListModel и затем использует его для отображения файлов

У меня много проблем и вопросов, но, во-первых, каков разумный способ сделать это(пожалуйста, сделайте так, чтобы часть списка не должна была быть написана на c ++)?

На данный момент есть 2 проблемы - я не могу понять, как получить доступ к ListModel из компонента Text;и я не могу понять, как сделать 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 Ответ

2 голосов
/ 30 июля 2011

Ваш код почти работает для меня. Я получаю сообщение об ошибке «QML ListModel: append: значение не является объектом». Это потому, что вы добавляете массивы. Если убрать скобки в строке

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

это работает. Чтобы сделать anotherModel публичным свойством, напишите его как

property ListModel anotherModel: ListModel {}
...