Qt is so Qt – Icip-icip QtWebKit

Beberapa hari belakangan ini saya lg seneng ngoprek2 Qt. Lgs pake C++ berhubung sekalian pengen latihan berbahasa yg satu ini lagi. Salah satu modul yang disediakan oleh Qt adalah QtWebKit yang membuka kemungkinan untuk melakukan integrasi WebKit (yayaya, ini html layout engine yg ituh..) dengan aplikasi yang kita buat.

Cara menggunakannya cukup mudah. Berikut ini kira-kira kode yang diperlukan untuk membuat sebuah peramban web super sederhana berbasiskan WebKit.

#include <QtGui>
#include <QtWebKit>

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    QWebView view;
    view.load(QUrl("http://ngoprek.fajran.web.id"));
    view.show();
    return app.exec();
}

QWebView di atas adalah sebuah widget (turunan dari QWidget) yang menampilkan QWebPage dan lalu QWebFrame dalam sebuah antar muka grafis. Berhubung widget ini tidak berada di dalam widget lain, maka sebuah window akan dibuatkan khusus untuk menampilkan widget ini.

Salah satu proses integrasi yang dimungkinkan adalah pertukaran pesan dalam bentuk pemanggilan fungsi antara aplikasi yang ditulis dalam C++ dan aplikasi web yang dibuka. Aplikasi C++ bisa menyuruh aplikasi web untuk mengeksekusi sebuah skrip dalam javascript. Aplikasi C++ ini juga bisa memasukkan sebuah objek ke dalam halaman web yang nantinya bisa digunakan oleh aplikasi yang ada di dalamnya. Cara melakukan hal ini juga tidak terlalu susah, namun saya masih belum begitu paham tentang bagaimana menyusun data yang ingin dipertukarkan.

Selama icip2 QtWebkit saya juga menjumpai setidaknya 2 masalah. Yang pertama adalah tentang Font di CSS 3. Saya mencoba membuat halaman web yang menggunakan font yang kita atur sendiri. Namun mengapa apa yang saya coba di Firefox tidak bekerja di QtWebKit. Setelah gugling2 dikit, ternyata memang ada masalah di QtWebKit terkait dengan peletakan font. Jika kita sebut lokasi font dengan local(), alias font yang terpasang di sistem, dan dengan url(), atau lokasi lain, maka QtWebKit sama sekali tidak akan memasang font tersebut. Baca saja laporan bug-nya untuk informasi lebih lanjut.

Masalah kedua adalah mengenai event penekanan tombol keyboard. Walau browser-browser yang ada juga punya beberapa perbedaan, namun QtWebKit sama sekali berbeda. Nilai yang diberikan pada variabel keyCode dari objek event yang terbentuk memiliki perbedaan dalam tombol-tombol panah. Nilai yang terbentuk pada browser biasa adalah 37, 38, 39, dan 40 untuk kiri, atas, kanan, dan bawah, namun QtWebKit memberikan nilai 28, 30, 29, dan 31. Saya belum menemukan laporan masalah untuk yang satu ini walau ada laporan yang mirip. Sepertinya mesti bikin laporan baru hehehe..

Saya juga membuka sebuah repositori ngoprek2 Qt di GitHub. Silakan buka http://github.com/fajran/qtangoprek.

Untuk contoh kode integrasi antara QtWebKit dengan aplikasi Qt belum selesai saya buat. Seharusnya mudah tapi kok rumit karena banyak yang mesti ditulis agar contohnya menarik. hehe..

Widget Qt4 dan OpenSceneGraph

Kabarnya, widget Qt4 bisa digambar di atas layar OpenGL. Jadi kepikiran gmn caranya widget2 tsb bisa juga dipasang bareng dg OpenSceneGraph. Gugling sedikit, eh ternyata udah ada yang buat!. Walau sepertinya masih ada masalah.

Saya coba donlod kodingan yg dikasih. Lalu ubah2 dikit supaya bisa nampilin kubus. Jadi deh =D

Okeh.. saatnya bereksperimen lagi..