Selamat tinggal HTML, Hai QML

Kekacauan HTML


Bagaimana saya bisa membuat aplikasi web tanpa menggunakan HTML? Untuk ini kita perlu: browser baru, QML dan back-end di Jawa.


Sedikit sejarah


HTML dibuat oleh para ilmuwan di CERN sebagai cara untuk berbagi artikel ilmiah. Kemudian berubah menjadi cara yang mudah untuk mengirim informasi di jaringan. Menjadi jelas bahwa fungsi hyperlink tidak cukup, dan kemudian komponen, formulir, CSS mulai ditambahkan. Tapi ini tidak cukup, kami membutuhkan dinamika, tambah JavaScript. Tetapi pada semua ini sangat tidak nyaman untuk dikembangkan, jadi di masa depan kerangka js muncul. Mereka berusaha memperbaiki kekurangan HTML. Tetapi saya pikir lebih baik mengobati penyakit itu sendiri daripada gejalanya. QML akan membantu kami dengan ini.


Mari kita mulai solusinya


Saya ingin segera mencatat bahwa solusi ini tidak siap produksi. Ini adalah "Hello World!" Aplikasi yang menunjukkan apa yang bisa dicapai dengan menggunakan alat ini.


Browser


Karena kita tidak perlu penguraian HTML, kita akan menulis peramban kita sendiri di Qt5, QML dan C ++. Browser kami harus berinteraksi dengan aplikasi back-end dan menampilkan informasi di layar.


Alur kerja browser:


  • Di bilah alamat, ketikkan URL sumber daya dan tekan enter
  • Dengan menggunakan permintaan HTTP, muat file qml pada hard drive
  • Menggunakan permintaan HTTP, muat data untuk file qml
  • Tampilkan file qml menggunakan Loader

TabComponent.qml


 ... TextInput { onAccepted: { var result = siteLoader.loadSite(addressIpt.text) if (result === LoadResultType.SUCCESS) { var props = siteLoader.loadProperties(addressIpt.text) var qmlPath = siteLoader.getMainQmlPath(addressIpt.text) pageLoader.setSource(qmlPath, props) } else { ... } } } ... Loader { id: pageLoader } 

Di sini siteLoader adalah turunan dari kelas C ++ yang diimpor ke qml. Ini mengimplementasikan logika browser.


TextInput adalah komponen bilah alamat di browser. Ketika Anda menekan enter , metode onAccepted dan logika memuat situs dijalankan.


QML memiliki kemampuan untuk menampilkan file melalui jaringan, tapi saya rasa ini bukan cara yang baik. Di masa depan, Anda dapat mengacaukan versi, dan jika versi yang cocok tidak mengunduh file sama sekali, tetapi gunakan yang itu.


Itu keseluruhan browser. Mari kita beralih ke back-end dan UI.


Back-end dan UI


Back-end dan UI adalah aplikasi web kami secara langsung. Kami akan menulis bagian UI di QML, dan back-end akan ditulis dalam spring boot , karena saya seorang programmer Java. Hal pertama yang kita butuhkan adalah file qml dengan deskripsi antarmuka kita.


main.qml


 import QtQuick 2.0 Rectangle { color: "lightgray" property alias textValue: helloText.text Text { id: helloText anchors.horizontalCenter: parent.horizontalCenter font.pointSize: 24 } } 

Semuanya sangat sederhana di sini.


 property alias textValue: helloText.text 

Baris ini diperlukan untuk menarik properti text sehingga Anda bisa memasukkannya ke Loader .
Sekarang tambahkan dua titik akhir:


 @RestController public class HelloController { @GetMapping( value = "/main.qml", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public byte[] mainQml() throws IOException { ClassPathResource resource = new ClassPathResource("main.qml"); return IOUtils.toByteArray(resource.getInputStream()); } @GetMapping( value = "/getProperties", produces = MediaType.APPLICATION_JSON_VALUE) public Object getProperties() { return "{\"textValue\": \"Hello World!\"}"; } } 

Titik akhir pertama akan mengembalikan file qml, dan yang kedua - data yang diperlukan. Menyimpan file di classpath bukanlah solusi terbaik. Selain itu, dalam aplikasi QML mungkin ada banyak file qml dan js . Tapi kami melakukannya untuk kesederhanaan.


Sebagai hasilnya, kita mendapatkan:


Halo contoh dunia


Pro dan kontra


Sekarang mari kita lihat pro dan kontra dari pendekatan ini


Pro


  • Kode UI klien relatif sederhana. Misalnya, kita tidak perlu menggunakan peretasan CSS apa pun untuk membuat 2 kolom dengan tinggi yang sama.
  • Pengembangan UI dapat dilakukan dalam desainer grafis Qt Creator
  • Agaknya kecepatan aplikasi akan jauh lebih tinggi daripada HTML
  • Menggunakan komponen UI desktop

Cons


  • Peramban kedua O RLY? Sampai masalah keamanan diselesaikan, tidak ada yang akan memasukkan kode di browser utama, dan tidak ada yang akan menginstal browser kedua untuk "situs dengan tipe yang berbeda."
  • Keamanan Sekarang dia benar-benar absen. Anda dapat membuat halaman yang memformat hard drive.
  • Untuk solusi produksi, Anda perlu menyelesaikan seratus pertanyaan: standar, sesi, caching data, keamanan, dll.
  • Semuanya masih bayi
  • Kurangnya perpustakaan komponen UI, dipertajam untuk membuat aplikasi web

Sejauh ini, ada jauh lebih banyak minus daripada plus. Nah, ini bisa dimengerti, ini hanya prototipe, yang ditulis dalam beberapa hari, pada lutut saya. Tapi semua masalah terpecahkan, setidaknya saya tidak melihat blocker yang serius.


Lalu mengapa artikel ini, Anda bertanya.


Saya tidak menemukan sesuatu yang serupa di Internet, mungkin saya terlihat buruk, dan sesuatu yang serupa sudah ada. Atau tidak ada yang hanya membutuhkannya. Bagaimanapun, saya ingin mendengar umpan balik dari Anda, dan dari mereka untuk memahami apakah perlu melakukan bisnis ini.


Sumber daya



PS Saya ingin mencatat bahwa metode ini pada dasarnya berbeda dari QmlWeb . Di QmlWeb , kode HTML + JS QmlWeb dari file qml dan dirender di browser.

Source: https://habr.com/ru/post/id473302/


All Articles