Russian Qt Forum

Qt => Qt Quick => Тема начата: Alex Custov от Декабрь 25, 2014, 16:23



Название: .pragma library vs. QObject+Q_PROPERTY
Отправлено: Alex Custov от Декабрь 25, 2014, 16:23
Оф. документация советует не использовать .pragma library для хранения application-wide данных (например, констант). Вместо этого советуют использовать синглетон QObject - очевидно, как C++ класс с множеством полей Q_PROPERTY, в которых будут хранится наши константы:

http://doc.qt.io/qt-5/qtquick-performance.html

Цитировать
Use singleton types instead of pragma library scripts

If you are using a pragma library script to store application-wide instance data, consider using a QObject singleton type instead. This should result in better performance, and will result in less JavaScript heap memory being used.

Например, был файл constants.js:
Код
Javascript
.pragma library
var X = 10;
и многими другими константами. Мы переделываем в C++

Код
C++ (Qt)
class Constants : public QObject
{
...
Q_PROPERTY(X READ X CONSTANT)
...
};

В тоже время когда-то читал, что не стоит злоупотреблять вызовами из JS к С++ коду, т.к. они не быстрые. У меня обращений к константам много, сотни. Не понимаю, почему рекомендуют использовать QObject? Разве это будет быстрее, чем .pragma library?


Название: Re: .pragma library vs. QObject+Q_PROPERTY
Отправлено: navrocky от Декабрь 29, 2014, 21:06
Есть еще новый способ задавать синглтоны с помощью pragma Singleton, оно слабо задокументировано, но работает. На мой взгляд удобнее чем .pragma library, т.к. свойства можно типизировать и грузить глобальные  компоненты средствами QML.

http://qt-project.org/groups/qt-contributors-summit-2013/wiki/Evolution-of-the-QML-language

В этой статье, правда, допущена ошибка. Надо обязательно писать "pragma Singleton" с большой буквы иначе ничего работать не будет.