пятница, ноября 09, 2012

Crusible qml highlighting scheme

Ссылка на qml.def файл. Для установки нужно скопировать файл в папку $FISHEYE_INST/syntax и перезапустить crusible.
Внешний вид:



пятница, ноября 02, 2012

Как указать путь к картинкам из QML, запакованного в ресурсный файл.

Проблема обсуждается тут. По большому счёту, это решение сейчас единственное:
  1. QString imagePath = QDir::currentPath()+"/images/";
  2. #if defined(Q_OS_MAC)
  3. imagePath = "file://"+imagePath;
  4. #endif
  5. QDeclarativeContext::setContextProperty("imagePath",imagePath);

О чем оно?

  1. Image {
  2.        id: image1
  3.        source: "images/face.png"

Указанный выше пример не будет работать, если qml упаковать в ресурсы и загрузить через  setSource. Решение в оригинальном топике, говорит, что мы можем прокинуть в qml из с++ переменную, содержащую путь к нашей папке с картинками, тогда:

  1. Image {
  2.        id: image1
  3.        source: imagePath + "images/face.png"

Будет работать. Однако, когда qml верстается это становится головной болью - эту переменную нужно будет определять в рутовом элементе, чтобы в нем и дочерних она была доступна. Не забыть удалить её перед сборкой ресурсного файла, т.к. setContextProperty из вашего с++ приложения будет переопределена уже в qml. Отлаживать при этом маленькие компоненты тоже не удобно - придется дублировать imagePath property и в них тоже.

В голову пришла забавная идея. А давайте напишем qml extension (https://github.com/misterion/QmlViewerDevHelper), который распарсит аргументы командной строки и позволит выставить проперти. QmlViewer имеет несколько аргументов(I/P), который отвечают за добавление папок к импорту dll. Они не валидируются и не ругаются, если в них написана ересь, т.е. можно написано -I "что угодно".

Напишем Qt Creator (Проекты -> Запуск)








Добавим dll и qmldir в папку  с плагинами (%QtDir%\%version%\imports). И запустим QmlViewer - теперь указанная нами переменная автоматом пробросится в qml.
Это очень удобно. Тем более, что параметры запуска QmlViewer хранятся в qmlproject.user и их не нужно комитить в репозитарий.