Eu quero executar um comando do sistema de dentro do meu aplicativo. Supõe-se executar um comando em um servidor remoto usando SSH. Mas esse não é realmente o ponto. O ponto é que não sei como executar nenhum tipo de comando no aplicativo. Eu perguntei na lista de emails e eles me indicaram para criar uma extensão QML usando C ++. Mas eu não conheço C ++ e parece que tenho que aprender muito apenas para executar um comando simples.
No Python (como no PHP), é fácil executar um comando do sistema. Existe alguma outra maneira de fazer isso no meu aplicativo Touch ou há alguém que poderia me ajudar ainda mais? Ou talvez tenha uma solução melhor para o meu problema?
application-development
ubuntu-touch
c++
qml
Daniel Holm
fonte
fonte
Respostas:
Isso não é algo compatível com o QML, a resposta típica é escrever um plug-in C ++ para lidar com esse tipo de coisa.
No entanto, a equipe do SDK está planejando várias extensões para fornecer aos desenvolvedores de aplicativos QML, e isso pode ser algo que eles implementam em um plug-in genérico que você pode usar.
fonte
Atualização: para 14.04, veja a resposta muito simplificada de int_ua.
Texto original:
Em http://talk.maemo.org/showthread.php?t=87580, há uma visão geral básica de como adicionar a extensão ao QML. Decidi tentar usando o ubuntu-sdk, que é um pouco diferente. Vou documentar abaixo.
Para este projeto, selecionei o Ubuntu Touch / UI simples com C ++ Backend no QtCreator. Isso cria um projeto com duas partes separadas, o backend e o touchui frontend, escritos em QML. No back-end, adicionaremos dois arquivos para a classe Launcher.
launcher.h:
launcher.cpp:
Essa classe simplesmente usa QProcess para executar um programa, aguarda o término, lê seu stdout e o retorna como uma string.
Em seguida, precisamos modificar o backend / backend.cpp para incluir a classe. Isso requer duas linhas. Anexe um include:
e em BackendPlugin :: registerTypes adicione uma linha:
Já deve haver uma linha para MyType, que é o exemplo incluído. Depois disso, poderemos criar o back-end. A única coisa que resta é usá-lo no arquivo main.qml. Para isso, adicionei uma linha:
e para o manipulador onClick do Button, defina:
Neste ponto, tudo o que resta é iniciá-lo e testá-lo. Aqui foi onde encontrei um problema, já que o QtCreator parece não configurar tudo corretamente por padrão. Como solução alternativa, no terminal, navegue até o diretório do projeto QtCreator e:
Em seguida, copie o arquivo libUbuntuExample.so do ProjectBuildDir / back-end para o Ubuntu / Example e o arquivo qmldir do ProjectName / back-end / qmldir. Então você pode executar:
Tenho certeza de que provavelmente existe uma maneira simples de manipular tudo isso, para que o Build / Run funcione.
fonte
Ubuntu 14.04
O conceito do tipo QProcess Launcher agora está funcionando sem problemas no Trusty with
ubuntu-sdk-team
PPA. Basta criar umQML Extension Library + Tabbed UI
projeto ( não use hífens no nome do projeto ainda ), substitua o conteúdo demytype.h
mytype.cpp
e mudar
qmlRegisterType
nobackend.cpp
paraEm seguida, basta limpar todos os
MyType
restos dos arquivos QML e adicionaronde você quiser e
no início.
Opcional
Eu também uso este wrapper:
Se você precisar de acesso root, adicione
pkexec
.fonte
Você realmente não precisa saber muito sobre c ++ para obter acesso aos comandos do terminal. Basta colocar o seguinte em qualquer arquivo que termine com .cpp, por exemplo, runPython.cpp.
Tudo o que você precisa descobrir agora é como obter o código c ++ em execução na QML, mas tenho certeza de que está muito bem documentado.
Observe que você pode adicionar qualquer comando linux que desejar, seguindo a mesma sintaxe
system("linux command");
.Espero que isto ajude!
fonte