2015-02-07 2 views
3

У меня есть проект с несколькими QML файлами. Все они находятся в файле ресурсов. Теперь я хочу загрузить внешнее изображение из локальной файловой системы. Но я не могу найти способ сделать это.Файл внутри ресурса не найден локальный файл

Image { 
    source: "images/image.png" // that tries to load file as 'qrc:/images/image.png' 
    source: "file://images/image.png" // that does not work (file not found) 
} 

Итак, теперь я немного смущен, как я могу загрузить файл правильно?

ответ

5

Механизм QML предполагает, что относительные пути, адресованные в файлах QML, хранящихся в системе ресурсов Qt, разрешаются в этом файле ресурсов. Так что, если ваш файл QML в качестве ресурса, и вы хотите получить доступ к файлу в пути каталога приложений вы должны установить путь от C++:

engine.rootContext()->setContextProperty("applicationPath", "file://"+qApp->applicationDirPath()+ "/"); 

Теперь вы можете обратиться файл в QML:

Image { 
    source: applicationPath + "images/image.png" 
} 
+1

Я обнаружил это недавно, и это правильный ответ. Я также предлагаю ссылку на http://doc.qt.io/qt-5/qml-url.html и цитирую ее: «Относительный URL-адрес разрешен относительно URL-адреса содержащего компонента». Вы говорите, что «все относительные пути в QML также должны быть разрешены в этом файле ресурсов», но это немного вводит в заблуждение, потому что это не просто специфично для файлов ресурсов. – Mitch

+0

@Mitch Вы правы. Я немного изменил его. – Nejat

+0

Спасибо @ Неед. В основном я искал решение только с QML, но, как я вижу, невозможно установить URL-адрес относительно приложения из ресурса. – folibis

Смежные вопросы