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”

Advertisements

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.

Manajemen Database SQLite dengan Qt

Sekarang kita latihan Qt lagi, kali ini bermain dengan database SQlite. Saya sudah belajar pemrograman C++ dengan Qt Framework sejak beberapa waktu lalu. Tapi belum banyak yang saya hasilkan sih, karena tidak fokus.

Program kali ini adalah program sederhana yang menampilkan tabel dari data yang ada di database SQlite. SQlite saya pilih karena drivernya sudah disertakan bersama installer Qt Framework (Windows). Tapi kalau Ubuntu, kita perlu menginstalnya terlebih dahulu. Paket driver SQlite adalah libqt4-sql-sqlite untuk Qt4 dan libqt5sql5-sqlite untuk Qt5.

Sebenarnya kita bisa mencontoh kode dari Examples yang ada di Qt Creator, yaitu project SQL Browser.

Continue reading “Manajemen Database SQLite dengan Qt”

Kalender Hijriyah dan jadwal waktu sholat sehari

Tulisan ini dipindahkan dari tulisan di blog saya yang lain.

Your Portfolio Archive currently has no entries. You can start creating them on your dashboard.

Sudah banyak widget-widget kalender hijriyah dan jadwal waktu sholat untuk situs web yang dibagikan oleh orang lain di internet. Namun kali ini saya memilih untuk membuatnya sendiri. Bukan karena tidak menghargai mereka yang sudah mendahului, tetapi karena saya ingin sekalian belajar dan mengembangkan kemampuan PHP dan juga menambah keanekaragaman karya semacam ini. Maksud saya adalah karya yang berhubungan dengan Islam. Semoga bisa menjadi salah satu syi’ar Islam.

Continue reading “Kalender Hijriyah dan jadwal waktu sholat sehari”

Register

Tulisan ini merupakan draf yang saya buat pada 20.12 tahun lalu. Draf yang merupakan sebuah ide saja, berupa judul yang nantinya saya isi dengan tulisan yang panjang.

Saya sebenarnya tahu kata register beberapa waktu sebelum membuat draf tulisan. Nah pada saat membuat draf ini, saya sedang senang-senangnya dengan bahasa Jawa. Saya membanding-bandingkan bahasa Jawa dengan Jepang yang saya anggap mempunyai kemiripan, yaitu adanya register. Apa itu register? Wikipedia punya jawabannya.

http://id.wikipedia.org/wiki/Laras_bahasa http://en.wikipedia.org/wiki/Register_%28sociolinguistics%29

Tulisan ini saya masukkan dalam jenis `status’ karena tidak mencukupi syarat tulisan yang saya inginkan seperti pada paragraf pertama. Saya harap lain waktu saya bisa memanjangkannya.

Mengurai (Parsing) JSON Qt4 dengan QJson

Yuk belajar kiti lagi, eh maksudnya Qt (dibaca kyut). Pada tulisan terdahulu tentang Graph API Facebook, saya sudah menerapkan pengurai (parser) JSON dengan Qt 5. Kelas yang digunakan antara lain QJsonDocument, QJsonObject dan QJsonValue. Itu semua ternyata baru ada pada Qt 5. Maka jika saya mengompilasinya dengan qmake-qt4, pasti terjadi error.

Sebagai gantinya, untuk mengolah JSON di Qt 4, kita membutuhkan pustaka QJson yang bisa diunduh dari http://qjson.sourceforge.net/. Jika pembaca menggunakan Qt di Windows, maka harus mengompilasi sendiri. Nah, kalau di Linux, terutama Ubuntu, QJson sudah ada di repositori sejak lama. Cukup instal libqjson0 dan libqjson-dev.

Continue reading “Mengurai (Parsing) JSON Qt4 dengan QJson”

Bismillahirrahmanirrahim

Membuat flashdisk bootable ada banyak caranya. Kali ini saya akan berbagi salah satu cara yang saya gunakan sejak beberapa waktu terakhir ini. Maksud dari ‘sekaligus menjadi backup file ISO’ adalah kita hanya perlu menyalin file ISO ke flashdisk tanpa ekstrak atau lainnya. Jadi, kita hanya menyalin seperti file biasa, maka kita bisa menjadikannya backup atau bisa juga membagikan kepada teman. Dan kita bisa menyalin lebih dari satu file ISO ke dalam satu flashdisk. Oleh karena itu, kita bisa menjadikannya multibootable, yaitu kita bisa memilih distro Linux yang akan di-boot nantinya.

Penafian: cara ini hanya berlaku untuk membuat flashdisk bootable bertipe MBR, bukan UEFI. Kemungkinan besar tidak akan bisa digunakan untuk menginstall dual-boot Linux dan Windows 10, misalnya, karena Windows terkini sudah menggunakan boot UEFI di perangkat keras keluaran terkini. Sebenarnya sudah ada aplikasi lain untuk membuat flashdisk bootable yang lebih mudah. Saya menyarankan pembaca untuk menggunakan cara yang lebih efisien saja, daripada mengikuti ego penulis ini. 😀 (diedit 27.10.17)

Grub4Dos merupakan bootloader grub yang dipasang di flashdisk. Untuk menjadikan flashdisk bootable, kita membutuhkan grub4dos installer, unduh dari http://download.gna.org/grubutil/grubinst-1.1-bin-w32-2008-01-01.zip

Dalam file tersebut sudah disediakan bootloader grub versi 1, bukan grub2. Kita memerlukan bootloader Grub4Dos agar flashdisk bisa bootable dengan file ISO ini. Grub menyediakan fitur boot dari file ISO, yang istilahnya di-chainload.

Unduh Grub4Dos dari http://download.gna.org/grub4dos/grub4dos-0.4.4.zip atau  http://code.google.com/p/grub4dos-chenall/downloads/list

Continue reading “Membuat Flashdisk Bootable sekaligus Menjadi Backup File ISO (dan Bisa Multiboot)”

Membuat Flashdisk Bootable sekaligus Menjadi Backup File ISO (dan Bisa Multiboot)