Здравствуйте, гость ( Вход | Регистрация )
JohnZ | Дата 14.6.2017, 12:32 |
Дык ясень-красень что evaluate возвращает QScriptValue, согласно докам, вопрос в другом, откуда взят параметр вызова "TetrixWindow" и что обозначает ? Что engine компилит ? Ведь это-же НЕ скрипт !!! Тогда ЧТО ? В проекте есть XML-ная UI форма с таким именем ! Не может-же engine компилить её ?! Но судя по строке вызова, получается именно так |
|
Litkevich Yuriy | Дата 13.6.2017, 15:55 |
судя по имени переменной "ctor", она является ссылкой на конструктор. | |
JohnZ | Дата 10.6.2017, 10:37 |
Вот кусок примера из 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"); // <---------- ??? Что она вычисляет ? подскажите плз ... |
|
Алексей1153 | Дата 20.5.2017, 10:56 |
я так понимаю, evaluate выполняет отдельный снипет. С аргументами, как показывает справка, можно вызвать функцию так http://doc.qt.io/qt-5/qscriptengine.html
можно также задать глобальные переменные переменные
сам не тестил, только предполагаю ) |
|
JohnZ | Дата 19.5.2017, 13:05 |
В доке написано Цитата 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, ес-сно) Заранее благодарен за помощь ! |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 19.4.2024, 10:44 |