Так вот:
1. В файл проекта добавляю строку QT += script
2. В заголовке нужного модуля добаляю
#include <QScriptEngine>
private:
QScriptEngine MacroEngine;
3. В теле программы
#include <QtScript>
//и уже в функции выполнения макроса, например при нажатии кнопки:
void MacroAnalizer::MacroOpen()
{
MainWindow* application = MainWindow::getApplication();
MacroEngine.globalObject().setProperty("m",MacroEngine.newQObject(this));
MacroEngine.globalObject().setProperty("toUnicode",MacroEngine.newFunction(toUnicode));
QString DirToLoad = QDir::currentPath()+"/Macros";
QString fileName
= QFileDialog::getOpenFileName(application, trUtf8("Выполнить макрос..."),DirToLoad,trUtf8( "Файлы макросов (*.smac)"));
if (fileName.isEmpty())
return;
QFile file(fileName);
if (file.open(QFile::ReadOnly)) {
QScriptValue result =
MacroEngine.evaluate(QLatin1String(file.readAll()));
if (result.isError()) {
QMessageBox::critical(application,
trUtf8("Ошибка выполнения"),
result.toString(),
QMessageBox::Yes
);
}
}
else
{
QString msg = trUtf8("Ошибка при чтении %1\n%2")
.arg(fileName)
.arg(file.errorString());
QMessageBox::warning(application, trUtf8("Ошибка"), msg);
return;
}
}
4. Для использования русских букв также добавляю в теле программы отдельную функцию, но не декларирую ее в загаловке:
QScriptValue toUnicode(QScriptContext *context, QScriptEngine *engine)
{
QString s = context->argument(0).toString();
return QScriptValue (engine, QString::fromUtf8(s.toAscii().data()));
}
5. После этого все функции, которые описаны в public slots будут доступны в скриптах.
И еще одна функция: toUnicode.
Пример скрипта:
//Пробный макрос
m.ver();
m.about();
m.line(0,0,0,100,100,100);
m.point(200,200,300);
m.circle("XY",0,0,0,200);
var s = toUnicode("Тестовый макрос");
m.history(s);
Не забываем говорить спасибо, если кому пригодился данный мануал.