Qt QML untuk Aplikasi Android (dengan KDE Necessitas)

Necessitas merupakan kakas pengembangan untuk aplikasi Android dengan Qt Framework, dikembangkan oleh tim KDE Project. Kakas ini menggunakan Qt Creator untuk IDE dan Qt versi 4.8.2 sebagai frameworknya. Tetapi tampaknya tidak diperbarui lagi, atau mungkin sudah diambil alih oleh Digia, selaku pemegang hak lisensi komersial Qt Framework.

Sekarang saatnya saya membagikan cerita tentang belajar membuat aplikasi Android dengan Qt Framework (QML). Tulisan sebelumnya tentang kakas pengembangan aplikasi Android dan MVC di Qt QML merupakan pengantar untuk tulisan ini.

Contoh aplikasi ini adalah RSS feed reader sederhana. Saat membuat New Project, pilih Qt Quick Application. Pada pilihan Kit, pilih untuk Android. Jika tidak ada, tambahkan kit Android setelah berhasil membuat New project. Nanti Qt Creator akan secara otomatis menambahkan file-file yang diperlukan untuk membuat sebuah APK, seperti misalnya AndroidManifest.xml. Pastikan Android SDK dan NDK sudah diatur dengan benar di Option Qt Creator. Kalau Necessitas biasanya sudah ada pengaturan saat instalasi. Berikut ini adalah source code QMLnya:

Continue reading Qt QML untuk Aplikasi Android (dengan KDE Necessitas)

Advertisements

Qt QML Model, View & Delegate

Pada tulisan ini saya hanya akan berbagi kode sumber Qt Quick pertama. Ini adalah intro ke pemrograman model view dengan QML. Sebelumnya sudah saya posting model view untuk Qt C++.

Contoh proyek ini adalah Qt Quick UI, jika anda membuat New Project di Qt Creator. File kode sumber dibagi menjadi 3, ditambah satu file “Kepala” yang opsional.

Utama.qml

Ini adalah file utama yang dieksekusi dengan qmlscene. Continue reading Qt QML Model, View & Delegate

Android Development (Macam-macam Kakas)

logo android
Logo Android
Tulisan terakhir saya tentang programming adalah tentang development aplikasi Android menggunakan Qt Libs. Sampai saat itu saya menggunakan KDE Necessitas sebagai kakasnya. Versi Qt yang digunakan adalah 4.8.2. Sekarang saya tahu bahwa ternyata Necessitas tidak diperbarui dalam kurun waktu yang cukup lama, dan masih tetap versi alpha 4. Saya tidak tahu mengapa, tetapi saya menduga ini mungkin sudah diambil alih Digia dan menjadikannya Qt Mobile sebagai strategi bisnisnya.

Berangkat dari hal di atas, saya mulai mencoba Qt 5 for Android. Namanya baru belajar, ya maklumlah. Selain itu, karena ukuran unduhan Qt framework yang besar, saya perlu pertimbangan khusus untuk mengunduhnya. Dan selain mulai belajar pengembangan aplikasi Android dengan Qt, saya juga mulai belajar QML. Yang mana sudah saya simpulkan pada tulisan yang lalu, bahwa banyak developer yang memilih QML untuk pengembangan aplikasi mobile.

Tetapi kali ini saya belum akan berbagi kode bagaimana pengembangan aplikasi mobile dengan QML ini. Karena saya cuma masih bisa membuat “Hello World”. Continue reading Android Development (Macam-macam Kakas)

Kubuntu 14.04

Sebagaimana kita tahu, distro Linux sangatlah beragam. Ini menyebabkan fragmentasi yang sangat besar, terutama komunitasnya. Ini bisa menyebabkan munculnya fanatisme terhadap suatu distro tertentu dan kadang menyebabkan perselisihan kecil antara anggota komunitas-komunitas. Sehingga tak heran jika ada komunitas yang kurang welcome kepada pengguna baru.

Fragmentasi juga terjadi pada lingkungan desktop. Yang mana kasus ini menurut saya bagus karena pengguna bisa menyesuaikan seleranya masing-masing, Keberagaman dan perkembangan desktop environment ini sangat menarik untuk diperhatikan. Sejak munculnya Unity dan GNOME 3, muncul pula MATE dan lain sebagainya disebabkan oleh ketidakpuasan anggota komunitas terhadap keduanya dan juga karena semangat open source tentunya. Di mana kebebasan itu benar-benar ada, termasuk kebebasan untuk memilih DE yang cocok untuk kita masing-masing.

Ngomong-ngomong soal kebebasan memilih, saya sendiri saat ini merupakan pengguna Kubuntu sejak beberapa waktu lalu. Lebih tepatnya sejak saya mendapati bahwa KDE lebih responsif daripada Unity Ubuntu. Ini menyangkut keterbatasan kemampuan pengolahan grafis perangkat keras komputer saya. Awalnya, sebagai ganti Unity, saya menggunakan Gnome-fallback Ubuntu. Tetapi karena sudah tidak seperti dulu yang mudah dikustomisasi tampilannya, saya mencoba lagi KDE yang pada waktu itu masih terkesan ‘berat’. Namun kenyataan berkata lain. Tim pemelihara Kubuntu bekerja dengan sangat baik dengan memberikan sentuhan akhir yang menjadikan Kubuntu adalah distro KDE dengan penggunaan resource paling rendah di jajaran atas.

Continue reading Kubuntu 14.04

Aplikasi Android dengan Pustaka Qt Framework

Salah satu alasan saya mempelajari pemrograman dengan Qt Framework adalah karena dukungan multiplatform. Sesuai dengan mottonya: “Code less. Create more. Deploy everywhere“. Yang perlu ditekankan adalah deploy everywhere-nya. Walaupun tidak sama seperti Java, Qt masih punya peluang untuk running di Android. Ini dibantu oleh Ministro yang akan mengunduh library Qt untuk Android.

Saya belum menjelajah sampai jauh utuk mencari tahu seberapa potensialnya Qt dipakai untuk mengembangkan aplikasi Android. Tapi jika googling, pasti kita akan menemukan banyak sekali pembahasan mengenai ini. Sejauh ini bisa saya simpulkan bahwa untuk pengembangan aplikasi Android dengan Qt, banyak developer yang lebih memilih QML daripada Qt widget. Bahkan contoh program Ubuntu SDK untuk Ubuntu Touch juga ditulis dalam QML.

Terlepas dari itu, saya kira Java tetaplah yang paling pantas untuk pengembangan aplikasi Android. Google juga menyatakan bahwa kita memang berpeluang untuk menggunakan bahasa C++ tapi jangan karena kita lebih suka dengan C++. Kode natif memang lebih powerful untuk mengakses fitur hardware, tapi akses ke API Android tidak banyak. Oleh karena itu, ada yang menyatakan, jika kita hanya akan sekali saja membuat aplikasi untuk Android, memakai Qt tidak masalah. Tapi jika berencana untuk membuat banyak aplikasi, tentunya Java lebih diutamakan.
Continue reading Aplikasi Android dengan Pustaka Qt Framework

Building Qt Framework from Source (Windows) dan Deploy Project-nya

Mengompilasi Kode Sumber Qt di Windows 7

Kali ini saya berbagi cara instalasi Qt Framework dengan megompilasi sendiri kode sumbernya. Tujuannya adalah mendapatkan hasil aplikasi yang sesuai dengan keinginan kita, dalam hal ini kebutuhan untuk deploy.

Pertama tentunya unduh kode sumber Qt di sini, cari yang ZIP ‘for Windows’, kira-kira berukuran 280-an MB (Qt 5.3).

Sediakan prasyarat

Sesuai dengan dokumentasi resmi ada di sini, kita membutuhkan:

  1. ActivePerl – Install a recent version of ActivePerl (download page) and add the installation location to your PATH.
  2. Python – Install Python from here and add the installation location to your PATH in order to be able to build Qt WebKit.
    • Jika kita memilih installer MSI, instal python dengan perintah msiexec /i python.msi di cmd dengan akses administrator.
  3. Install Ruby from here and add the installation location to your PATH in order to be able to build Qt WebKit.

Tentunya MSVC harus sudah terinstal. Saya menginstal MS Visual Studio C++ 2010 Express. Jika belum punya, unduh file installer dari sini.

Alternatif dari MSVC adalah MinGW. Tapi tidak saya bahas di sini, karena saya pun belum pernah mencobanya.

Continue reading Building Qt Framework from Source (Windows) dan Deploy Project-nya

Pemrograman Model/View dalam Qt (Terjemahan)

Mulai pada tulisan ini, saya coba menerjemahkan dokumentasi dalam Qt Creator tentang Model/View Programming. Saya tidak begitu menangkap maksud dari dokumentasi itu dalam bahasa Inggris. Jadi, dengan bekal Google Translate dan bismillah, sedikit demi sedikit semoga bisa paham pada akhirnya.

Pengantar Model/View Programming

Qt memuat seperangkat kelas item view yang menggunakan arsitektur model/view untuk mengelola hubungan antara data dan caranya disajikan kepada pengguna. Pemisahan fungsionalitas yang diperkenalkan oleh arsitektur ini memberikan fleksibilitas yang lebih besar pada pengembang untuk menyesuaikan presentasi dari item, dan menyediakan antarmuka model standar untuk memungkinkan berbagai sumber data agar bisa digunakan dengan penggambaran item yang ada. Dalam dokumen ini, kami memberikan pengenalan singkat paradigma model / view, menguraikan konsep yang bersangkutan, dan menjelaskan arsitektur sistem penggambaran item. Masing-masing komponen dalam arsitektur dijelaskan, dan contoh diberikan untuk menunjukkan bagaimana menggunakan kelas yang tersedia.

Arsitektur model / view

Model-View-Controller (MVC) adalah pola desain yang berasal dari Smalltalk yang sering digunakan ketika membangun antarmuka pengguna. Dalam Design Patterns, Gamma dkk. menulis:

MVC terdiri dari tiga macam objek. Model adalah objek aplikasinya, View adalah presentasi layarnya, dan Controller mendefinisikan cara user interface bereaksi terhadap input pengguna. Sebelum MVC, pengguna desain antarmuka cenderung mengumpulkan obyek ini bersama-sama. MVC memisahkan mereka untuk meningkatkan fleksibilitas dan penggunaannya kembali.

Jika objek penggambaran dan pengendali digabungkan, hasilnya adalah arsitektur model / view. Ini masih memisahkan cara data itu disimpan dari cara penyajian kepada pengguna, tetapi memberikan kerangka lebih sederhana berdasarkan prinsip-prinsip yang sama. Pemisahan ini memungkinkan untuk menampilkan data yang sama dalam beberapa penggambaran yang berbeda, dan menerapkan jenis penggambaran baru, tanpa mengubah struktur data yang mendasarinya. Untuk memungkinkan penanganan input pengguna yang fleksibel, kami memperkenalkan konsep delegasi. Keuntungan memiliki delegasi dalam kerangka ini adalah bahwa dia memungkinkan untuk kustomisasi cara item data digambarkan dan diedit.

Arsitektur model / view
model-view-controller qtModel berkomunikasi dengan sumber data, menyediakan sebuah antarmuka untuk komponen lain dalam arsitektur. Sifat komunikasi tergantung pada jenis sumber data, dan cara model diimplementasikan.

View memperoleh indeks model dari model itu; ini adalah referensi untuk item-item dari data. Dengan menyediakan indeks model untuk model, view bisa mendapat detail item data dari sumber data.

Dalam view yang standar, delegasi menggambar item data. Bila item diedit, delegasi berkomunikasi dengan model secara langsung dengan menggunakan indeks model.

Secara umum, kelas model / view dapat dipisahkan menjadi tiga kelompok yang dijelaskan di atas: model, view, dan delegasi. Masing-masing komponen ini didefinisikan oleh kelas abstrak yang menyediakan antarmuka umum dan, dalam beberapa kasus, implementasi default dari fitur-fitur. Kelas abstrak dimaksudkan agar bisa diturunkan dalam rangka memberikan kelengkapan fungsi yang diharapkan oleh komponen lainnya; ini juga memungkinkan komponen khusus bisa ditulis.

Model, view, dan delegasi berkomunikasi satu sama lain menggunakan sinyal dan slot:

  1. Sinyal dari model memberi tahu view tentang perubahan pada data yang dimiliki oleh sumber data.
  2. Sinyal dari view memberikan informasi tentang interaksi pengguna dengan item yang ditampilkan.
  3. Sinyal dari delegasi digunakan selama mengedit untuk memberitahu model dan view tentang keadaan editor.

Model

Semua model-model item berdasarkan pada kelas QAbstractItemModel. Kelas ini mendefinisikan sebuah antarmuka yang digunakan oleh view dan delegasi untuk mengakses data. Data itu sendiri tidak harus disimpan dalam model; dapat disimpan dalam struktur data atau repositori yang disediakan oleh kelas terpisah, file, database, atau komponen aplikasi lainnya.

Konsep dasar mengenai model disajikan pada bagian Kelas Model. (Pada tulisan yang akan datang)

QAbstractItemModel menyediakan antarmuka data yang cukup fleksibel untuk menangani view yang mewakili data dalam bentuk tabel, daftar, dan pohon. Namun, ketika menerapkan model baru untuk daftar dan struktur data sejenis tabel, kelas QAbstractListModel dan QAbstractTableModel merupakan titik awal yang lebih baik karena mereka menyediakan implementasi standar sesuai dengan fungsi umum. Masing-masing dari kelas-kelas ini dapat diturunkan untuk menyediakan model yang mendukung jenis khusus dari daftar dan tabel.

Proses menurunkan kelas model dibahas pada bagian Membuat Model Baru.

Qt menyediakan beberapa model siap pakai yang dapat digunakan untuk menangani item data:

  1. QStringListModel digunakan untuk menyimpan daftar sederhana item QString.
  2. QStandardItemModel mengelola struktur pohon yang lebih kompleks dari item, masing-masing dapat berisi data yang berubah-ubah.
  3. QFileSystemModel menyediakan informasi tentang file dan direktori dalam sistem berkas-berkas lokal.
  4. QSqlQueryModel, QSqlTableModel, dan QSqlRelationalTableModel digunakan untuk mengakses database dengan menggunakan kaidah model / view.

Jika model-model standar tidak memenuhi kebutuhan Anda, Anda dapat menurunkan QAbstractItemModel, QAbstractListModel, atau QAbstractTableModel untuk menciptakan model kustom Anda sendiri.

Views

Implementasi lengkap disediakan untuk berbagai jenis tampilan: QListView menampilkan daftar item, QTableView menampilkan data dari model dalam sebuah tabel, dan QTreeView menunjukkan item-item model data dalam daftar hirarkis. Masing-masing kelas ini berdasarkan pada kelas dasar abstrak QAbstractItemView. Meskipun kelas-kelas ini adalah implementasi yang siap pakai, mereka juga dapat diturunkan untuk memberikan view yang disesuaikan.

View yang tersedia diusut pada bagian View Classes.

Delegasi

QAbstractItemDelegate adalah kelas dasar abstrak untuk delegasi dalam kerangka model / view. Implementasi delegasi default disediakan oleh QStyledItemDelegate, dan ini digunakan sebagai delegasi default dengan view standar Qt. Namun, QStyledItemDelegate dan QItemDelegate alternatif independen untuk pelukisan dan menyediakan editor untuk item dalam view. Perbedaan antara mereka adalah bahwa QStyledItemDelegate menggunakan gaya yang sekarang untuk melukis itemnya. Oleh karena itu kami merekomendasikan menggunakan QStyledItemDelegate sebagai kelas dasar ketika mengimplementasikan delegasi kustom atau ketika bekerja dengan stylesheet Qt.

Delegasi dijelaskan pada bagian Kelas-kelas Delegasi.

Penyortiran

Ada dua cara untuk mendekati penyortiran dalam arsitektur Model / view; pendekatan mana yang dipilih bergantung pada model yang mendasarinya.

Jika model Anda bisa diurutkan, yaitu jika ia menggunakan kembali fungsi QAbstractItemModel::sort(), baik QTableView maupun QTreeView menyediakan API yang memungkinkan Anda untuk mengurutkan data model secara terprogram. Selain itu, Anda dapat mengaktifkan pernyortiran interaktif (yaitu memungkinkan pengguna untuk menyortir data dengan mengklik header dari view), dengan menghubungkan sinyal QHeaderView::sortIndicatorChanged() ke slot QTableView::sortByColumn() atau slot QTreeView::sortByColumn(), masing-masing.

Pendekatan alternatif, jika model Anda tidak memiliki antarmuka yang diperlukan atau jika Anda ingin menggunakan tampilan daftar untuk menyajikan data Anda, adalah dengan menggunakan model proxy untuk mengubah struktur model Anda sebelum menyajikan data dalam view. Hal ini dibahas secara rinci pada bagian Proxy Model.

Kelas yang Memudahkan

Sejumlah kelas yang memudahkan berasal dari kelas standar view untuk kepentingan aplikasi yang mengandalkan kelas-kelas item view dan tabel Qt yang berbasis item. Mereka tidak dimaksudkan untuk diturunkan.

Contoh kelas tersebut termasuk QListWidget, QTreeWidget, dan QTableWidget.

Kelas-kelas ini kurang fleksibel dibandingkan dengan kelas-kelas view, dan tidak dapat digunakan dengan model yang berubah-ubah. Kami menyarankan agar Anda menggunakan pendekatan model / view untuk menangani data dalam item view kecuali jika Anda sangat membutuhkan seperangkat kelas berbasis item.

Jika Anda ingin memanfaatkan fitur yang disediakan oleh pendekatan model / view sementara masih menggunakan antarmuka berbasis item, pertimbangkan untuk menggunakan kelas view, seperti QListView, QTableView, dan QTreeView dengan QStandardItemModel.