Название: [РЕШЕНО] Внедрить константы внутрь QML документа из вне Отправлено: Yegor от Ноябрь 11, 2014, 22:20 Здравствуйте, уважаемые форумчане!
Работаю в qt4.8.6 Есть QML документ - StartPage.qml. В нем имеется свойство caption. Код: import QtQuick 1.1 Структура документа не меняется, поэтому я его компилирую в состав .exe Но нужно время от времени менять только значение свойства caption. Жестко. Я хочу сделать отдельный qml файл - MyConstants.qml, в котором будут храниться значение этой константы. Файл буду редактировать вручную. Компилировать его в состав проекта не буду. Так удобнее. Вопрос: как написать такой внешний QML файл с константой? И как импортировать его значение в StartPage.qml? Название: Re: Внедрить константы внутрь QML документа из вне Отправлено: kibsoft от Ноябрь 12, 2014, 10:03 Может есть смысл использовать QSettings? Сделать обертку в C++, добавить нужное свойство, пробросить в QML, а потом менять значение в конфигурационном ini файле.
P.S. в Qt Quick 2.x можно было бы использовать QML Settings. Название: Re: Внедрить константы внутрь QML документа из вне Отправлено: vregess от Ноябрь 12, 2014, 15:12 Если хочется сделать все только на стороне QML, то по идее сам файл можно положить рядом с приложением и импортировать как обычно.
Из документации Qt 4.8.5 Цитировать QStringList QDeclarativeEngine::importPathList () const By default, the list contains the directory of the application executable, paths specified in the QML_IMPORT_PATH environment variable, and the builtin ImportsPath from QLibraryInfo. Или добавить свой путь импорта - QDeclarativeEngine::addImportPath(). А вместо qml файла можно использовать js: Код
Код: import QtQuick 1.1 Название: Re: Внедрить константы внутрь QML документа из вне Отправлено: Отражение луны от Ноябрь 12, 2014, 15:29 Отредактировал пост потому, что не сразу понял задачу. Если Вам нужны настройки - храните их в json в внешнем файле, данные из них подтягивайте при помощи XMLHttpRequest. Распарсить json и подставить данные будет не сложно.
В чем преимущество перед хранением в виде .qml или .js? Прежде всего в том, что настройки можно будет загружать заново в ходе работы программы. Название: Re: Внедрить константы внутрь QML документа из вне Отправлено: Yegor от Ноябрь 13, 2014, 19:50 Самый простой способ - хранить константы в отдельном реальном .js
Я кладу его рядом с исполняемым. Только вот проблема, при запуске программы, в окно ошибок выводится: Код: Script qrc:/сonstants.js unavailable То есть программа решает, что файл нужно загрузить из системы ресурсов (раз пишет qrc:/), а не из реальной файловой системы. Как в StartPage.qml указать, что подгружать constants.js нужно из файловой системы? Название: Re: Внедрить константы внутрь QML документа из вне Отправлено: vregess от Ноябрь 13, 2014, 20:16 То есть программа решает, что файл нужно загрузить из системы ресурсов (раз пишет qrc:/), а не из реальной файловой системы. Как в StartPage.qml указать, что подгружать constants.js нужно из файловой системы? Попробуй добавить QCoreApplication::applicationDirPath() в QDeclarativeEngine::addImportPath(). Название: Re: Внедрить константы внутрь QML документа из Отправлено: Yegor от Ноябрь 13, 2014, 20:46 Цитировать Попробуй добавить QCoreApplication::applicationDirPath() в QDeclarativeEngine::addImportPath(). Попробовал. Все равно не помогает. Да и лишнее оно, такой путь и так по умолчанию есть (смотрел QDeclarativeEngine::importPathList()).В доке нашел, что если нужно грузить файлы из файловой системы, то нужно указывать префикс file:/ Но в таком случае выводит ошибку Script file:///сonstants.js unavailable file:///сonstants.js: File not found Название: [РЕШЕНО] Внедрить константы внутрь QML документа из вне Отправлено: Yegor от Ноябрь 13, 2014, 20:57 Правильно делать префикс file:, а не file:/
Чтобы выглядело: Код: import "file:constants.js" Тогда js загрузится, из той директории, где и исполняемый. Задача решена. Спасибо всем! |