crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 25.4.2024, 7:52