Russian Qt Forum
Сентября 09, 2025, 13:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование MDI совместно с Qt Script  (Прочитано 4464 раз)
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";
 };

В результате окно с нужной формой открывается, скрипт имеет доступ к елементам формы, но события не вызываются. Может кто знает в чем причина?

Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« Ответ #1 : Января 25, 2010, 12:15 »

QScriptEngine engine; // Это у тебя локальная переменная, которая погибнет после выполнения MDIMainWindow::slotNewDocument()

p.s. а почему не один QScriptEngine на все?
Записан
vladmailbox
Гость
« Ответ #2 : Января 25, 2010, 12:36 »

Спасибо, заработало.

> p.s. а почему не один QScriptEngine на все?
Не глобальный, т.к. несколько скриптов должно одновременно выполнятся в разных окнах.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.614 секунд. Запросов: 22.