crossplatform.ru

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


  Ответ в QT + скрипты
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 12.12.2009, 11:53
  JuryS1806, читай тему: Справка по кнопкам и тэгам форума
JuryS1806 Дата 12.12.2009, 1:48
  Всем доброго времени суток ! Недавно разобрался как работают скрипты 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);

Не забываем говорить спасибо, если кому пригодился данный мануал.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 3:39