Call an AppleScript from Qt/it

From Qt Wiki
< Call an AppleScript from Qt
Revision as of 11:07, 20 November 2015 by Mcosta (talk | contribs) (Undo revision 19876 by Mcosta (talk))
(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

Includere AppleScript in Qt

Se volete includere un AppleScript in Qt potete usare questo script come punto di partenza.

#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;
}

Prende l'attuale script e lo mette nella variabile aScript. Quindi crea un QProcess per invocare il tool a riga di comando AppleScript osascript.

Gli argomenti passati invocano osascript con -l AppleScript, in modo che non necessiti di indovinare il linguaggio di scripting.

Lo script è quindi mandato a osascript via stdin.

Il programma attende i dati in output dello script per iniziare. Noi_dobbiamo_leggere l'ouput dello script, quindi usiamo waitForReadyRead.

Se ci sono bytes disponibili, il programma li legge e li converte in un QString (se questo va bene per i dati previsti!). Nel mondo reale il programma deve collegarsi ai vari segnali di readyReadXXX() e connettersi agli slot per collezionare i dati.

Se non necessiti dell'output dello script, chiama waitForFinished() dopo closeWriteChannel().