Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

Call an AppleScript from Qt/it: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
m (AutoSpider moved page Call an Apple Script from Qt Italian to Call an AppleScript from Qt/it: Localisation)
No edit summary
Line 19: Line 19:
int main(int argc, char **argv)
int main(int argc, char **argv)
{
{
QApplication a(argc, argv);
  QApplication a(argc, argv);


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


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


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


return 0;
  return 0;
}
}
</code>
</code>


Prende l'attuale script e lo mette nella variabile aScript. Quindi crea un QProcess per invocare il tool a riga di comando AppleScript osascript.
Prende l'attuale script e lo mette nella variabile <code>aScript</code>. 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.
Gli argomenti passati invocano osascript con -l AppleScript, in modo che non necessiti di indovinare il linguaggio di scripting.

Revision as of 11:05, 20 November 2015

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 `System Events`"
    " activate\n"
    " display dialog `Hello world`"
    "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().