LINUX.ORG.RU

[qt4] QScriptEngine + QCoreApplication


0

1

Делаю скриптовый движек для лаборатории, в котором много разного оборудования. Что-то вроде браузерный js, только оперирует он не кнопочками и всякой прочей ненужностью, а железными вольтметрами, высокоамперными генераторами тока, моторами для поворота sampleplate и прочими нужностями.

Так вот. Стокнулся с такой архитектурной проблемой. Я создаю QCoreApplication, потом создаю класс этого самого моторчика, устанавливаю у него эти самые globalObjects, которые представляют устройства из скрипта и запускаю. Моторчик скрипт интерпретирует, делает с устройствами то, что запрограмировано, а потом завершает работу. И вот потом, надо запускать app.exec(), но оно тогда просто зависает, т.е. ждёт ивентов, которые никогда не придут, потому-что скрипт уже закончился. Сейчас сделано просто return 0, т.е. app.exec() не запускается, но мне это как кажется архитектурно не верным.

Было бы классно, если бы к моторчику присоедить какой-то сигнал из QCoreApplicaition, как в QThread - started() например, и по этому сигналу запускать обработку скрипта, а когда она закончится, эмитить finished, который к qApp.quit() соединёт. Но такого сигнала нет, вижу только aboutToQuit(), который мне не нужен.

Может кто-нибудь что-нибудь подскажет как бы так сделать по красивее? Или у меня уже qt головного мозга?

★★★★

Последнее исправление: nanoolinux (всего исправлений: 2)

Хехе, я только сегодня писал интерпретатор javascript и столкнулся с этой же проблемой. Решил очень просто. Всю логику интерпретатора поместил в отдельный объект, и вызывал его метод вот так:

QMetaObject::invokeMethod(&interpreter, "execute", Qt::QueuedConnection);

Он будет вызван уже после app.exec(). Завершение программы через QCoreApplication::quit().

anonymous
()
Ответ на: комментарий от anonymous

Да, спасибо, о великий анонимус. Сегодня ночью сам до этого дошёл.

nanoolinux ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.