English | Русский | Italiano | Español | Shqip
Si necesitas hacer una llamada a un comando AppleScript desde dentro de Qt, este trozo de código te puede servir como inicio
- #include <QApplication>
- #include <QProcess>
- #include <QDebug>
- int main(int argc, char **argv)
- {
- QString aScript =
- "tell application \"System Events\"\n"
- " activate\n"
- " display dialog \"Hello world\"\n"
- "end tell\n";
- QStringList processArguments;
- processArguments << "-l" << "AppleScript";
- QProcess p;
- p.start(osascript, processArguments);
- p.write(aScript.toUtf8());
- p.closeWriteChannel();
- p.waitForReadyRead(-1);
- qDebug() << "the result of the script is" << resultAsString;
- return 0;
- }
Este mantiene el script actual en una variable aScript. Luego crea un QProcess para invocar el comando AppleScript usando la herramienta de linea de comandos osascript.
Usamos el argumento -l AppleScript para llamar a osascript, esto es necesario para que no tenga que adivinar que lenguaje de script es usado.
El guión se alimenta entonces a través osascript via stdin.
El programa espera la salida de datos del script para iniciar. Debemos_Leer la salida del script para a continuación utilizar waitForReadyRead.
Si hay bytes disponibles, el programa los lee y los convierte luego a QString (si eso está bien para los datos esperados!).
If there are bytes available, the program reads them and converts them to a QString (if that is ok for the expected data!).
En un programa en el mundo real este debe conectarse a las diferentes signals readyReadXXX() y conectar un slot a el para recolectar los datos.
Si no necesita la salida de el script, solo llama a waitForFinished() justo después de invocar la función closeWriteChannel(). El programa entonces esperara hasta que el script haya terminado, de lo contrario el flujo de control va a ir al final y terminara prematuramente la llamada al comando.

