How incapsulate JS example "Calculator" ?
Solved
General and Desktop
-
Hi !
Now I have my simple class// In HPP class fpUI : public QDialog { Q_OBJECT public: Q_INVOKABLE fpUI(int id, MainWindow *parent = nullptr, Qt::WindowFlags f = Qt::Widget); fpUI(QDomNode item, MainWindow *parent = nullptr, Qt::WindowFlags f = Qt::Widget); ~fpUI(); MainWindow *getParent() { return mParent; } public slots: signals: void keyPressed(int key, int mod); // For Qt Script protected: int Idd; // This Idd QString objName; MainWindow *mParent; QScriptEngine *engine; QWidget *formUI; // == This UI protected slots: void on_labelPress(); void on_buttonPress(); void initUI(QDomNode item); void closeEvent(QCloseEvent *event); void keyPressEvent (QKeyEvent *event); }; // In CPP fpUI::fpUI(QDomNode item, MainWindow *parent, Qt::WindowFlags f) : QDialog(parent, f) { mParent = parent; Idd = item.toElement().attribute("id").toInt(); initUI(item); } // construct UI void fpUI::initUI(QDomNode item) { formUI = nullptr; if (item.nodeName() != getTagByClass(md_forma)) // forma { QMessageBox::warning(this, tr("ProGramm"), tr("Is Not UI Object !!!")); return; } objName = QString("Frm%0").arg(Idd); setObjectName(objName); engine = mParent->getEngine(); QDomElement frmo = item.firstChildElement(getTagByClass(md_dialogform)); // dialogform QDomElement scro = item.firstChildElement(getTagByClass(md_sourcecode)); // sourcecode // Load Dialog Form from Resource !!! formUI = mParent->loadResource(frmo, dynamic_cast<QWidget *>(this)); if (!formUI) { QMessageBox::information(this, tr("ProGramm"), tr("Error load UI !")); return; } setGeometry(formUI->geometry()); setWindowTitle(formUI->windowTitle()); setFont(formUI->font()); QScriptValue global = engine->globalObject(); // Register this Object in JS !!! QScriptValue valUI = engine->newQObject(formUI, QScriptEngine::ScriptOwnership); // Load JS module and evaluate it in Object "objName" Context !!! // Context is Important !!! QScriptValue scrUI = mParent->loadScript(scro, objName); // In Calculator example is : ////! [2] // QScriptValue ctor = engine.evaluate("Calculator"); // QScriptValue scriptUi = engine.newQObject(ui, QScriptEngine::ScriptOwnership); // QScriptValue calc = ctor.construct(QScriptValueList() << scriptUi); ////! [2] }
As in result in JS will be created QDialog Object with it's Script inside.
In Script we write:var le = this.findChild("leSuma") // Line Edit Suma
In Calculator example we can write::
// field Suma direct, with not need call findChild("leSuma") !!! Important !!! var le = this.ui.leSuma
My question - How i can direct access to control members in JS fpUI Object like in Calculator example, with out call findChild("") ?
Thx advance !!!