Saya ingin menjalankan perintah sistem dari dalam aplikasi saya. Seharusnya menjalankan perintah pada server jauh menggunakan SSH. Tapi bukan itu intinya. Intinya adalah saya tidak tahu cara menjalankan perintah apa pun dari aplikasi. Saya bertanya dalam daftar surat dan mereka merujuk saya untuk membangun ekstensi QML menggunakan C ++. Tapi saya tidak tahu C ++ dan sepertinya saya harus belajar banyak hanya untuk menjalankan perintah sederhana.
Dalam Python (seperti dalam PHP) mudah untuk menjalankan perintah sistem. Apakah ada cara lain untuk melakukannya di aplikasi Touch saya, atau adakah orang yang bisa membantu saya lebih banyak? Atau mungkin punya solusi yang lebih baik untuk masalah saya?
application-development
ubuntu-touch
c++
qml
Daniel Holm
sumber
sumber
Jawaban:
Ini bukan sesuatu yang didukung QML, jawabannya adalah menulis plugin C ++ untuk menangani hal semacam itu.
Namun, tim SDK merencanakan berbagai ekstensi untuk diberikan kepada pengembang aplikasi QML, dan ini mungkin sesuatu yang mereka terapkan dalam plugin generik yang dapat Anda gunakan.
sumber
Pembaruan: Untuk 14,04 lihat jawaban yang paling disederhanakan oleh int_ua.
Teks asli:
Di http://talk.maemo.org/showthread.php?t=87580 ada ikhtisar dasar tentang cara menambahkan ekstensi ke QML. Saya memutuskan untuk mencobanya menggunakan ubuntu-sdk sebagai gantinya, yang sedikit berbeda. Saya akan mendokumentasikan di bawah ini.
Untuk proyek ini saya memilih Ubuntu Touch / Simple UI dengan C ++ Backend di QtCreator. Ini menciptakan sebuah proyek dengan dua bagian terpisah, backend dan touchui frontend yang ditulis dalam QML. Untuk backend kita akan menambahkan dua file untuk kelas Launcher.
launcher.h:
launcher.cpp:
Kelas ini hanya menggunakan QProcess untuk menjalankan suatu program, menunggu sampai selesai, membaca stdout-nya, dan mengembalikannya sebagai string.
Selanjutnya kita perlu memodifikasi backend / backend.cpp untuk memasukkan kelas. Ini membutuhkan dua baris. Tambahkan sebuah termasuk:
dan di BackendPlugin :: registerTypes tambahkan baris:
Seharusnya sudah ada baris untuk MyType, yang merupakan contoh yang disertakan. Setelah ini, kita harus dapat membangun backend. Satu-satunya yang tersisa adalah menggunakannya di file main.qml. Untuk ini saya menambahkan baris:
dan ke handler onClick Button, atur:
Pada titik ini yang tersisa hanyalah memulai dan mengujinya. Di sinilah saya mengalami masalah, karena QtCreator tampaknya tidak mengatur semuanya dengan benar secara default. Saat saya mengatasinya, di terminal navigasikan ke direktori proyek QtCreator Anda dan:
Kemudian salin file libUbuntuExample.so dari ProjectBuildDir / backend ke Ubuntu / Contoh, dan file qmldir dari ProjectName / backend / qmldir. Maka Anda dapat menjalankan:
Saya yakin mungkin ada cara sederhana untuk mengatur semua ini sehingga Build / Run berfungsi.
sumber
Ubuntu 14.04
Konsep tipe Peluncur QProcess sekarang bekerja tanpa masalah di Trusty dengan
ubuntu-sdk-team
PPA. Buat sajaQML Extension Library + Tabbed UI
proyek ( jangan gunakan tanda hubung dalam nama proyek ), ganti kontenmytype.h
mytype.cpp
dan perubahan
qmlRegisterType
dalambackend.cpp
untukSelanjutnya, cukup bersihkan semua
MyType
sisa dari file QML dan tambahkandimanapun Anda suka dan
pada awalnya.
Pilihan
Saya juga menggunakan pembungkus ini:
Jika Anda membutuhkan akses root, tambahkan
pkexec
.sumber
Anda benar-benar tidak perlu tahu banyak tentang c ++ untuk mendapatkan akses ke perintah terminal. Masukkan saja yang berikut ini di file yang diakhiri dengan .cpp, misalnya runPython.cpp.
Yang harus Anda ketahui sekarang adalah bagaimana agar kode c ++ berjalan di QML tapi saya yakin itu didokumentasikan dengan sangat baik.
Perhatikan bahwa Anda dapat menambahkan perintah linux yang Anda suka dengan mengikuti sintaks yang sama
system("linux command");
.Semoga ini membantu!
sumber