Call an AppleScript from Qt/ru

From Qt Wiki
< Call an AppleScript from Qt
Revision as of 15:58, 16 March 2015 by AutoSpider (talk | contribs) (AutoSpider moved page Call an AppleScript from Qt Russian to Call an AppleScript from Qt/ru: Localisation)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

English | Русский | Italiano | Español | Shqip

Запуск AppleScript из Qt

Если вы хотите вызвать команды AppleScript в Qt, вы можете использовать следующий пример кода, как отправную точку.

#include <QApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char **argv)
{
 QApplication a(argc, argv);

QString aScript =
 "tell application quot;System Eventsquot;"
 " activate\n"
 " display dialog quot;Hello worldquot;"
 "end tell\n";

QString osascript = "/usr/bin/osascript";
 QStringList processArguments;
 processArguments << "-l" << "AppleScript";

QProcess p;
 p.start(osascript, processArguments);
 p.write(aScript.toUtf8());
 p.closeWriteChannel();
 p.waitForReadyRead(-1);
 QByteArray result = p.readAll();
 QString resultAsString(result); // if appropriate
 qDebug() << "the result of the script is" << resultAsString;

 return 0;
}

В переменной aScript находться скрипт, который мы хотим выполнить. Затем создается QProcess для вызова osascript- консольного интерпретатора AppleScript'а.

osascript с аргументом "-l AppleScript", чтобы явно указать язык и отключить автоматическое определение.

Скрипт передается в osascript через стандартный ввод.

Прогамма ждет каких-нибудь выходных данных из скрипта. Мы организуем чтения вывода из скрипта, следовательно используем waitForReadyRead.

Если байты для чтения доступны, программа читает их и конвертирует в QString (если подходящий тип для ожидаемых данных!). В реальности программа должна использовать подключения различных readyReadXXX() сигналов и связывать их с слотами для сбора данных.