Chcę uruchomić polecenie systemowe z poziomu mojej aplikacji. Przypuszczalnie uruchom polecenie na zdalnym serwerze za pomocą SSH. Ale tak naprawdę nie o to chodzi. Chodzi o to, że nie wiem, jak uruchomić dowolne polecenie z aplikacji. Zapytałem na liście mailowej, a oni polecili mi zbudowanie rozszerzenia QML przy użyciu C ++. Ale nie znam C ++ i wydaje się, że muszę się wiele nauczyć, aby uruchomić proste polecenie.
W Pythonie (jak w PHP) łatwo jest uruchomić polecenie systemowe. Czy jest jakiś inny sposób, aby to zrobić w mojej aplikacji Touch, czy jest ktoś, kto mógłby mi jeszcze bardziej pomóc? A może masz lepsze rozwiązanie mojego problemu?
application-development
ubuntu-touch
c++
qml
Daniel Holm
źródło
źródło
Odpowiedzi:
Nie jest to obsługiwane przez QML, typową odpowiedzią jest napisanie wtyczki C ++ do obsługi tego rodzaju rzeczy.
Jednak zespół SDK planuje różne rozszerzenia, które mają zapewnić programistom aplikacji QML, i może to być coś, co implementują w ogólnej wtyczce, której można użyć.
źródło
Aktualizacja: 14.04 zobacz znacznie uproszczoną odpowiedź int_ua.
Oryginalny tekst:
Na stronie http://talk.maemo.org/showthread.php?t=87580 znajduje się podstawowy przegląd dodawania rozszerzenia do QML. Postanowiłem spróbować zamiast tego za pomocą ubuntu-sdk, co jest nieco inne. Udokumentuję poniżej.
Do tego projektu wybrałem Ubuntu Touch / Simple UI z C ++ Backend w QtCreator. Tworzy to projekt z dwiema oddzielnymi częściami: backendem i frontonem touchui napisanym w QML. Do backendu dodamy dwa pliki dla klasy Launcher.
launcher.h:
launcher.cpp:
Ta klasa po prostu używa QProcess do wykonania programu, czeka na zakończenie, odczytuje standardowe wyjście i zwraca jako ciąg znaków.
Następnie musimy zmodyfikować backend / backend.cpp, aby uwzględnić klasę. Wymaga to dwóch linii. Dołącz dołącz:
i w BackendPlugin :: registerTypes dodaj linię:
Powinien już być wiersz dla MyType, który jest dołączonym przykładem. Po tym powinniśmy być w stanie zbudować backend. Pozostaje tylko użyć go w pliku main.qml. W tym celu dodałem wiersz:
i w module obsługi onClick przycisku ustaw:
W tym momencie pozostaje tylko uruchomienie i przetestowanie. Tutaj natknąłem się na problem, ponieważ QtCreator nie wydaje się domyślnie konfigurować wszystkiego poprawnie. W miarę obejścia tego problemu w terminalu przejdź do katalogu projektu QtCreator i:
Następnie skopiuj plik libUbuntuExample.so z ProjectBuildDir / backend do Ubuntu / Example, a plik qmldir z ProjectName / backend / qmldir. Następnie możesz uruchomić:
Jestem pewien, że istnieje prawdopodobnie prosty sposób, aby wszystko to spreparować, więc Build / Run po prostu działa.
źródło
Ubuntu 14.04
Koncepcja typu QProcess Launcher działa teraz bez problemów w Trusty z
ubuntu-sdk-team
PPA. Po prostu utwórzQML Extension Library + Tabbed UI
projekt ( nie używaj jeszcze łączników w nazwie projektu ), zamień zawartośćmytype.h
mytype.cpp
i zmiany
qmlRegisterType
wbackend.cpp
DoNastępnie po prostu wyczyść wszystkie
MyType
pozostałości z plików QML i dodajgdziekolwiek chcesz i
na początku.
Opcjonalny
Używam również tego opakowania:
Jeśli potrzebujesz dostępu do konta root, dodaj
pkexec
.źródło
Naprawdę nie musisz dużo wiedzieć o c ++, aby uzyskać dostęp do poleceń terminala. Po prostu umieść poniższe w dowolnym pliku z rozszerzeniem .cpp, na przykład runPython.cpp.
Teraz musisz tylko dowiedzieć się, jak uruchomić kod c ++ w QML, ale jestem pewien, że jest to bardzo dobrze udokumentowane.
Zauważ, że możesz dodać dowolne polecenie linux, postępując zgodnie z tą samą składnią
system("linux command");
.Mam nadzieję że to pomoże!
źródło