![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
JohnZ |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
В доке написано
Цитата 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, ес-сно) Заранее благодарен за помощь ! |
|
|
![]() |
JohnZ |
![]()
Сообщение
#2
|
Участник ![]() ![]() Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
Вот кусок примера из 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"); // <---------- ??? Что она вычисляет ? подскажите плз ... |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 11.5.2025, 13:27 |