30 нояб. 2011 г.

QtScript. От простого к сложному.

Давно хотел написать что-нибудь об этом замечательном фреймворке, с которым работаю достаточно много времени. Qt можно сказать перевернул моё отношение к с++. В этой заметке хочу рассказать об использование интересного и полезного инструмента - QtScript. О его назначении, что это такое и с чем его едят, можно почитать достаточно подробно в русском варианте здесь.
Итак, сразу перейдем к делу. Простейший вариант обработки скрипта:
// создаем среду для исполнения кода Qt Script
QScriptEngine engine;
// выполняем код "100 + 1" и возвращаем значение
QScriptValue value = engine.evaluate("100 + 1");
// проверяем ошибки
if (engine.hasUncaughtException()) 
    qCritical() << engine.uncaughtExceptionBacktrace();
// преобразуем QScriptValue в C++ тип
int cppvalue = value.toInteger();
Допустим, нам требуется передать некий объект в скрипт и проделать с ним какие-то действия. Как написано в документации - "Любой экземпляр, основанный на QObject, можно сделать доступным для использования в сценариях.".
// объект для передачи в скрипт
QLabel * label = new QLabel;
// создаем объект-обёртку для использования в QtScript
QScriptValue objectValue = engine.newQObject();
// передаем его непосредственно в глобальное окружение скрипта
engine.globalObject().setProperty("label", engine.newQObject(label));
Теперь в коде скрипта доступна глобальная переменная label. Переменная служит в качестве посредника для базового объекта C++.
Далее можно смело в коде скрипта делать так:
label.setText("Hello World !");
и наш лэйбл отобразит отобразит все что нам нужно.

Комментариев нет: