crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QT + скрипты, Краткий мануал по работе со скриптами
JuryS1806
  опции профиля:
сообщение 12.12.2009, 1:48
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

Спасибо сказали: 9 раз(а)




Репутация:   0  


Всем доброго времени суток ! Недавно разобрался как работают скрипты 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 - 12.12.2009, 11:52
Причина редактирования: Используй форматирование
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 12.12.2009, 11:53
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


JuryS1806, читай тему: Справка по кнопкам и тэгам форума
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 5.12.2024, 2:54