Russian Qt Forum

Qt => Qt Quick => Тема начата: BlackSoul от Август 29, 2012, 16:49



Название: Доступ к qApp из qml
Отправлено: BlackSoul от Август 29, 2012, 16:49
Доброго времени суток.

имеется qt приложение, которое выполняет некоторый qml код( допустим, задача стоит "получить список файлов в текущей папке, используя qml" ).

Вопрос: Как можно получить доступ из qml к qApp или хотя бы QApplication::applicationDirPath() ?

есть вариант наследования от QApplication с переопределением нужных методов и объявлением их Q_INVOKABLE( тогда можно будет в qml передать 1 объект и не париться ради каждого метода), но он мне не нравится.

может есть еще варианты?


Название: Re: Доступ к qApp из qml
Отправлено: mutineer от Август 29, 2012, 16:57
Можно выставить любой наследник QObject в qml при помощи http://doc.crossplatform.ru/qt/4.7.x/qdeclarativecontext.html#setContextProperty


Название: Re: Доступ к qApp из qml
Отправлено: BlackSoul от Август 30, 2012, 08:03
это понятно. но у него можно будет вызвать только слоты и методы с Q_INVOKABLE


Название: Re: Доступ к qApp из qml
Отправлено: Patrin Andrey от Август 30, 2012, 08:17
есть вариант наследования от QApplication с переопределением нужных методов и объявлением их Q_INVOKABLE( тогда можно будет в qml передать 1 объект и не париться ради каждого метода), но он мне не нравится.
Наследоваться не стоит, ИМХО. Функционал который тебе может быть нужен, может быть реализован не через виртуальные функции, и тогда ничего не переопределишь. Лучше просто создать отдельный объект который через Q_INVOKABLE будет выполнять определённые действия.


Название: Re: Доступ к qApp из qml
Отправлено: kirill9617 от Январь 09, 2013, 09:34
Код
C++ (Qt)
QApplication app(argc, argv);
QmlApplicationViewer viewer;
....
viewer.rootContext()->setContextProperty(QString("cp_apppath"),app.appapplicationDirPath());
....
 
cp_apppath -имя нашей ссылки

после этого к ссылке можно обращатся из любого QML и JS кода
например:
Код:
Image {
    id: cover
    source: cp_apppath+"/images/cover.jpg"
}