Context Evaluate, Как Выполнить модули в едином контексте ? |
Здравствуйте, гость ( Вход | Регистрация )
Context Evaluate, Как Выполнить модули в едином контексте ? |
JohnZ |
19.5.2017, 13:05
Сообщение
#1
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
В доке написано
Цитата QScriptValue QScriptEngine::evaluate ( const QString & program, const QString & fileName = QString(), int lineNumber = 1 ) Evaluates program, using lineNumber as the base line number, and returns the result of the evaluation. The script code will be evaluated in the current context. Но в действительности получается что каждый evaluate создаёт свой контекст и ...
z не вычисляется, т.к. в его контексте нет x & y ?! Это при условии что вызов evaluate происходит из _разных_ объектов, но по единому указателю QScriptEngine . Вопрос - возможно-ли сохранить единый контекст для ВСЕХ evaluate ? (до пере-инициализации QScriptEngine, ес-сно) Заранее благодарен за помощь ! |
|
|
Алексей1153 |
20.5.2017, 10:56
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
я так понимаю, evaluate выполняет отдельный снипет. С аргументами, как показывает справка, можно вызвать функцию так
http://doc.qt.io/qt-5/qscriptengine.html
можно также задать глобальные переменные переменные
сам не тестил, только предполагаю ) |
|
|
JohnZ |
10.6.2017, 10:37
Сообщение
#3
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Вот кусок примера из QT, из тетриса ...
Раскрывающийся текст int main(int argc, char *argv[]) { Q_INIT_RESOURCE(tetrix); //! [1] QApplication app(argc, argv); QScriptEngine engine; QScriptValue Qt = engine.newQMetaObject(QtMetaObject::get()); Qt.setProperty("App", engine.newQObject(&app)); engine.globalObject().setProperty("Qt", Qt); //! [1] #if !defined(QT_NO_SCRIPTTOOLS) QScriptEngineDebugger debugger; debugger.attachTo(&engine); QMainWindow *debugWindow = debugger.standardWindow(); debugWindow->resize(1024, 640); #endif //! [2] evaluateFile(engine, ":/tetrixpiece.js"); evaluateFile(engine, ":/tetrixboard.js"); evaluateFile(engine, ":/tetrixwindow.js"); //! [2] //! [3] TetrixUiLoader loader; QFile uiFile(":/tetrixwindow.ui"); uiFile.open(QIODevice::ReadOnly); QWidget *ui = loader.load(&uiFile); uiFile.close(); QScriptValue ctor = engine.evaluate("TetrixWindow"); // <---------- ??? QScriptValue scriptUi = engine.newQObject(ui, QScriptEngine::ScriptOwnership); QScriptValue tetrix = ctor.construct(QScriptValueList() << scriptUi); //! [3] ........ Во второй секции 3 послед-х вызова evaluate. Ведь раблтает в едином контексте ! У меня "попутный" вопрос, что делает отмеченная строка в 3-й секции ? Ведь evaluateFile(engine, ":/tetrixwindow.js"); уже вызывалась во 2-й секции. Что-бы это значило ??? QScriptValue ctor = engine.evaluate("TetrixWindow"); // <---------- ??? Что она вычисляет ? подскажите плз ... |
|
|
Litkevich Yuriy |
13.6.2017, 15:55
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
судя по имени переменной "ctor", она является ссылкой на конструктор.
|
|
|
JohnZ |
14.6.2017, 12:32
Сообщение
#5
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Дык ясень-красень что evaluate возвращает QScriptValue, согласно докам, вопрос в другом,
откуда взят параметр вызова "TetrixWindow" и что обозначает ? Что engine компилит ? Ведь это-же НЕ скрипт !!! Тогда ЧТО ? В проекте есть XML-ная UI форма с таким именем ! Не может-же engine компилить её ?! Но судя по строке вызова, получается именно так Сообщение отредактировал JohnZ - 14.6.2017, 12:39 |
|
|
Текстовая версия | Сейчас: 28.11.2024, 5:29 |