Je veux exécuter une commande système depuis mon application. Il est supposé exécuter une commande sur un serveur distant en utilisant SSH. Mais ce n'est pas vraiment le point. Le fait est que je ne sais pas comment exécuter n'importe quel type de commande à partir de l'application. J'ai demandé dans la liste de diffusion et ils m'ont référé pour construire une extension QML en utilisant C ++. Mais je ne connais pas le C ++ et il semble que je doive apprendre tellement que pour exécuter une simple commande.
En Python (comme en PHP), il est facile d'exécuter une commande système. Y a-t-il une autre façon de le faire dans mon application Touch, ou y a-t-il quelqu'un qui pourrait m'aider encore plus? Ou peut-être avoir une meilleure solution à mon problème?
la source
Réponses:
Ce n'est pas quelque chose que QML prend en charge, la réponse typique est d'écrire un plugin C ++ pour gérer ce genre de chose.
Cependant, l'équipe du SDK prévoit différentes extensions à fournir aux développeurs d'applications QML, et cela peut être quelque chose qu'ils implémentent dans un plugin générique que vous pouvez utiliser.
la source
Mise à jour: pour 14.04 voir la réponse très simplifiée par int_ua.
Texte original:
Sur http://talk.maemo.org/showthread.php?t=87580, vous trouverez un aperçu de base sur la façon d'ajouter l'extension à QML. J'ai décidé de lui donner une photo en utilisant ubuntu-sdk à la place, ce qui est légèrement différent. Je documenterai ci-dessous.
Pour ce projet, j'ai sélectionné Ubuntu Touch / Simple UI avec C ++ Backend dans QtCreator. Cela crée un projet avec deux parties distinctes, le backend et le touchui frontend écrit en QML. Au backend, nous allons ajouter deux fichiers pour la classe Launcher.
launcher.h:
launcher.cpp:
Cette classe utilise simplement QProcess pour exécuter un programme, attend qu'il se termine, lit sa sortie standard et la renvoie sous forme de chaîne.
Ensuite, nous devons modifier backend / backend.cpp pour inclure la classe. Cela nécessite deux lignes. Ajoutez une inclusion:
et dans BackendPlugin :: registerTypes ajoutez une ligne:
Il devrait déjà y avoir une ligne pour MyType, qui est l'exemple inclus. Après cela, nous devrions pouvoir construire le backend. Il ne reste plus qu'à l'utiliser dans le fichier main.qml. Pour cela j'ai ajouté une ligne:
et au gestionnaire onClick du bouton, définissez:
À ce stade, il ne reste plus qu'à le démarrer et à le tester. Voici où j'ai rencontré un problème, car QtCreator ne semble pas tout configurer correctement par défaut. Pendant que je contourne, dans le terminal, accédez à votre répertoire de projet QtCreator et:
Copiez ensuite le fichier libUbuntuExample.so de ProjectBuildDir / backend vers Ubuntu / Example et le fichier qmldir de ProjectName / backend / qmldir. Ensuite, vous pouvez exécuter:
Je suis sûr qu'il existe probablement un moyen simple de tout régler afin que Build / Run fonctionne.
la source
Ubuntu 14.04
Le concept de type QProcess Launcher fonctionne désormais sans problème dans Trusty avec
ubuntu-sdk-team
PPA. Créez simplement unQML Extension Library + Tabbed UI
projet ( n'utilisez pas encore de tirets dans le nom du projet ), remplacez le contenu demytype.h
mytype.cpp
et le changement
qmlRegisterType
dans l'backend.cpp
àEnsuite, nettoyez tous les
MyType
restes des fichiers QML et ajoutezoù vous voulez et
au début.
Optionnel
J'utilise également ce wrapper:
Si vous avez besoin d'un accès root, ajoutez
pkexec
.la source
Vous n'avez vraiment pas besoin d'en savoir beaucoup sur c ++ pour avoir accès aux commandes du terminal. Mettez simplement ce qui suit dans n'importe quel fichier se terminant par .cpp, par exemple runPython.cpp.
Tout ce que vous avez à découvrir maintenant est de savoir comment obtenir le code c ++ en QML, mais je suis sûr que c'est très bien documenté.
Notez que vous pouvez ajouter n'importe quelle commande linux que vous aimez en suivant la même syntaxe
system("linux command");
.J'espère que cela t'aides!
la source