Название: Использование MDI совместно с Qt Script Отправлено: vladmailbox от Января 24, 2010, 12:01 Хочу написать MDI приложение в котором каждое окно представляет собой скрипт. Для открытия нового окна использую код:
void MDIMainWindow::slotNewDocument() { int num = _pma->subWindowList().size(); QScriptEngine engine; QString scriptFileName("../calc.js"); QFile scriptFile(scriptFileName); scriptFile.open(QIODevice::ReadOnly); engine.evaluate(scriptFile.readAll(), scriptFileName); scriptFile.close(); QUiLoader loader; QFile uiFile("../calc.ui"); uiFile.open(QIODevice::ReadOnly); QWidget *ui = loader.load(&uiFile, this); uiFile.close(); QMdiSubWindow * mdiWnd = _pma->addSubWindow(ui); ui->setWindowTitle(tr("Документ %1").arg(num+1)); ui->setParent(mdiWnd); QScriptValue ctor = engine.evaluate("Calculator"); QScriptValue scriptUi = engine.newQObject(ui, QScriptEngine::AutoOwnership); QScriptValue calc = ctor.construct(QScriptValueList() << scriptUi); ui->show(); } И тестовый скрипт: function Calculator(ui) { this.ui = ui; with (ui) { bt1.text = "Button1"; bt2.text = "Button2"; bt1.clicked.connect(this, this.btClicked); bt2.clicked.connect(this, this.btClicked); } }; Calculator.prototype.btClicked = function() { __qt_sender__.text = "Clicked"; }; В результате окно с нужной формой открывается, скрипт имеет доступ к елементам формы, но события не вызываются. Может кто знает в чем причина? Название: Re: Использование MDI совместно с Qt Script Отправлено: ax от Января 25, 2010, 12:15 QScriptEngine engine; // Это у тебя локальная переменная, которая погибнет после выполнения MDIMainWindow::slotNewDocument()
p.s. а почему не один QScriptEngine на все? Название: Re: Использование MDI совместно с Qt Script Отправлено: vladmailbox от Января 25, 2010, 12:36 Спасибо, заработало.
> p.s. а почему не один QScriptEngine на все? Не глобальный, т.к. несколько скриптов должно одновременно выполнятся в разных окнах. |