Quiero ejecutar un comando del sistema desde mi aplicación. Se supone que debe ejecutar un comando en un servidor remoto utilizando SSH. Pero ese no es realmente el punto. El punto es que no sé cómo ejecutar ningún tipo de comando desde la aplicación. Pregunté en la lista de correo y me recomendaron construir una extensión QML usando C ++. Pero no conozco C ++ y parece que tengo que aprender mucho solo para ejecutar un comando simple.
En Python (como en PHP) es fácil ejecutar un comando del sistema. ¿Hay alguna otra forma de hacerlo en mi aplicación Touch, o hay alguien que pueda ayudarme aún más? ¿O tal vez tiene una mejor solución a mi problema?
application-development
ubuntu-touch
c++
qml
Daniel Holm
fuente
fuente
Respuestas:
Esto no es algo que QML admita, la respuesta típica es escribir un complemento C ++ para manejar ese tipo de cosas.
Sin embargo, el equipo del SDK está planeando varias extensiones para proporcionar a los desarrolladores de aplicaciones QML, y esto puede ser algo que implementen en un complemento genérico que puede usar.
fuente
Actualización: para 14.04 ver la respuesta simplificada de int_ua.
Texto original:
En http://talk.maemo.org/showthread.php?t=87580 hay una descripción básica de cómo agregar la extensión a QML. Decidí intentarlo usando ubuntu-sdk, que es ligeramente diferente. Lo documentaré a continuación.
Para este proyecto, seleccioné Ubuntu Touch / Simple UI con C ++ Backend en QtCreator. Esto crea un proyecto con dos partes separadas, el backend y la interfaz táctil escrita en QML. Al backend vamos a agregar dos archivos para la clase Launcher.
launcher.h:
launcher.cpp:
Esta clase simplemente usa QProcess para ejecutar un programa, espera a que termine, lee su stdout y lo devuelve como una cadena.
A continuación, debemos modificar backend / backend.cpp para incluir la clase. Esto requiere dos líneas. Añadir un incluir:
y en BackendPlugin :: registerTypes agregue una línea:
Ya debería haber una línea para MyType, que es el ejemplo incluido. Después de esto, deberíamos poder construir el backend. Lo único que queda es usarlo en el archivo main.qml. Para esto agregué una línea:
y para el controlador onClick del botón, establezca:
En este punto, todo lo que queda es iniciarlo y probarlo. Aquí es donde me encontré con un problema, ya que QtCreator no parece configurar todo correctamente de forma predeterminada. Mientras soluciono, en la terminal navegue a su directorio de proyecto QtCreator y:
Luego copie el archivo libUbuntuExample.so de ProjectBuildDir / backend a Ubuntu / Example, y el archivo qmldir de ProjectName / backend / qmldir. Entonces puedes ejecutar:
Estoy seguro de que probablemente haya una forma simple de arreglar todo esto, así que Build / Run simplemente funciona.
fuente
Ubuntu 14.04
El concepto de tipo QProcess Launcher ahora funciona sin problemas en Trusty con
ubuntu-sdk-team
PPA. Simplemente cree unQML Extension Library + Tabbed UI
proyecto ( no use guiones en el nombre del proyecto todavía ), reemplace el contenido demytype.h
mytype.cpp
y cambiar
qmlRegisterType
en elbackend.cpp
aA continuación, simplemente limpie todos los
MyType
restos de los archivos QML y agreguedonde quieras y
al principio.
Opcional
También uso este contenedor:
Si necesita acceso de root, agregue
pkexec
.fuente
Realmente no necesita saber mucho sobre c ++ para acceder a los comandos de la terminal. Simplemente coloque lo siguiente en cualquier archivo que termine con .cpp, por ejemplo runPython.cpp.
Todo lo que tiene que descubrir ahora es cómo ejecutar el código c ++ en QML, pero estoy seguro de que está muy bien documentado.
Tenga en cuenta que puede agregar cualquier comando de Linux que desee siguiendo la misma sintaxis
system("linux command");
.¡Espero que esto ayude!
fuente