Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QT + скрипты
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Script. Интеграция WebKit
JuryS1806
Всем доброго времени суток ! Недавно разобрался как работают скрипты Qt (поддержка их начиная с версии Qt 4.3 и выше)

Так вот:
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);

Не забываем говорить спасибо, если кому пригодился данный мануал.
Litkevich Yuriy
JuryS1806, читай тему: Справка по кнопкам и тэгам форума
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.