Call an AppleScript from Qt: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
'''English'''<br />| [[Call_an_AppleScript_from_Qt_Russian|Русский]]<br />| [[Call_an_Apple_Script_from_Qt_Italian |Italiano]]<br />| [[Call_an_AppleScript_from_Qt_Spanish|Español]]<br />| [[Call_an_AppleScript_from_Qt_Albanian|Shqip]]<br />| [[Call_an_AppleScript_from_Qt_Bulgarian|Български]]<br />[[Category:HowTo]]
'''English'''
| [[Call_an_AppleScript_from_Qt_Russian|Русский]]
| [[Call_an_Apple_Script_from_Qt_Italian |Italiano]]
| [[Call_an_AppleScript_from_Qt_Spanish|Español]]
| [[Call_an_AppleScript_from_Qt_Albanian|Shqip]]
| [[Call_an_AppleScript_from_Qt_Bulgarian|Български]]
[[Category:HowTo]]


If you want to call AppleScript commands from within Qt you can use this code snippet as a starting point.
If you want to call AppleScript commands from within Qt you can use this code snippet as a starting point.


<code><br />#include &lt;QApplication&amp;gt;<br />#include &lt;QProcess&amp;gt;<br />#include &lt;QDebug&amp;gt;
<code>
#include <QApplication>
#include <QProcess>
#include <QDebug>


int main(int argc, char **argv)<br />{<br /> QApplication a(argc, argv);
int main(int argc, char **argv)
{
QApplication a(argc, argv);


QString aScript =<br /> &quot;tell application quot;System Eventsquot;&quot;<br /> &quot; activate\n&amp;quot;<br /> &quot; display dialog quot;Hello worldquot;&quot;<br /> &quot;end tell\n&amp;quot;;
QString aScript =
"tell application quot;System Eventsquot;"
" activate\n"
" display dialog quot;Hello worldquot;"
"end tell\n";


QString osascript = &quot;/usr/bin/osascript&amp;quot;;<br /> QStringList processArguments;<br /> processArguments &lt;&lt; &quot;-l&amp;quot; &lt;&lt; &quot;AppleScript&amp;quot;;
QString osascript = "/usr/bin/osascript";
QStringList processArguments;
processArguments << "-l" << "AppleScript";


QProcess p;<br /> p.start(osascript, processArguments);<br /> p.write(aScript.toUtf8());<br /> p.closeWriteChannel();<br /> p.waitForReadyRead(–1);<br /> QByteArray result = p.readAll();<br /> QString resultAsString(result); // if appropriate<br /> qDebug() &lt;&lt; &quot;the result of the script is&amp;quot; &lt;&lt; resultAsString;
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;<br />}<br /></code>
return 0;
}
</code>


It holds the actual script in variable aScript. Then creates a QProcess for invoking the AppleScript command line tool osascript.
It holds the actual script in variable aScript. Then creates a QProcess for invoking the AppleScript command line tool osascript.

Revision as of 10:24, 25 February 2015

English | Русский | Italiano | Español | Shqip | Български

If you want to call AppleScript commands from within Qt you can use this code snippet as a starting point.

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

It holds the actual script in variable aScript. Then creates a QProcess for invoking the AppleScript command line tool osascript.

The arguments call osascript with -l AppleScript, so that the it needs not to guess the script language.

The script is then fed to osascript via stdin.

The program waits for some data on the output of the script to come in. We do read the output of the script, hence waitForReadyRead.

If there are bytes available, the program reads them and converts them to a QString (if that is ok for the expected data!). In a real world program on should connect to the various readyReadXXX() signals and connect a slot to it to collect the data.