konoha.qt4パッケージの使い方
皆さんこんにちは、お久しぶりです。あけましておめでとうございます。
本年もよろしくお願いします。
昨年末に開催されたQt Developer Conference Tokyo/2011にて、KonohaScriptの紹介をさせて頂きました。これを区切りとして、konoha.qt4パッケージを含むバイナリパッケージをgooglecodeにアップロードしました。
ダウンロードはこちらから
本日は、このバイナリパッケージのインストール方法と使い方を簡単にご紹介したいと思います。
konoha.qt4パッケージとは
konoha.qt4パッケージは、PythonにおけるPyQtライブラリのようなもので、Qtを利用したGUIアプリケーションをKonohaScriptで開発するためのライブラリ群です。
インストール方法
次の中から、ご自身の環境にあったものをダウンロードして下さい。全て64bit OS用です。
- konoha-QtDevConf_x86_64.rpm(Fedora 16にて動作確認)
- konoha-QtDevConf_amd64.deb(Ubuntu 11.10にて動作確認)
- konoha-QtDevConf_win64.zip(Windows 7 / Windows Vistaにて動作確認)(インストーラ版はこちら)
- konoha-QtDevConf_macosx.dmg(MacOSX 10.6.8 (Snow Leopard)にて動作確認)
Linux版とMac版にはQt本体が含まれていませんので、別途インストールが必要になります。Linuxの方は、yumやaptなどのパッケージ管理システムからQtの最新版(Qt-4.8.0)をインストールして下さい。Macの方は、Qt Libraryのソースコードをダウンロードし、インストールパスをデフォルトのままにして、make installして下さい。
qt-everywhere-opensource-src-4.8.0.tar.gz
または、MacPortsやHomebrewをお使いの方は、Qt-4.8.0をインストールして、
/usr/local/Trolltech/Qt-4.8.0
使い方
konoha.qt4パッケージは、基本的にQtのC++インタフェースにあわせてAPI設計されています。Qtを使用したことのある方は、それほど抵抗なく利用できると思います。APIリファレンスは現在のところ用意しておりませんので、クラス設計等は、Qt本家のドキュメントhttp://doc.trolltech.com/4.8-snapshot/index.htmlをご参照ください。
konoha.qt4パッケージを利用したサンプルプログラムを幾つか用意しました。
テキストエディタ
QTextEditを利用して、簡単なテキストエディタを作成しました。
using konoha.qt4.*; QApplication app = new QApplication(); QWidget widget = new QWidget(); QTextEdit textedit = new QTextEdit(); QVBoxLayout layout = new QVBoxLayout(); layout.addWidget(textedit); widget.setLayout(layout); widget.show(); app.exec();
上記のコードの実行結果は以下のようになります。
このように、konoha.qt4パッケージを使用すれば、クロスプラットフォームのGUIアプリケーションを数行程度で開発することができます。c++のQtライブラリは、細かい属性を変更するたびに、変更箇所をコンパイルして実行しなければなりませんが、スクリプト言語を使用すれば、再コンパイルなしに即実行できますので、開発効率の点で非常に優れているといえます。
シグナル
本家のQtライブラリは、シグナルとスロットを用いてオブジェクト間の通信を行います。一方、konoha.qt4では、統一的なインタフェースで、シグナルに対するコールバック関数を登録することができます。
// c++の場合 // チェックボックスのオン・オフの切り替えに連動してラベルの表示・非表示を切り替える QLabel *label = new QLabel("Label"); QCheckBox *checkBox = new QCheckBox; connect(checkBox, SIGNAL(toggled(bool)), label, SLOT(setVisible(bool)));
// KonohaScriptの場合 // チェックボックスのオン・オフの切り替えに連動してラベルの表示・非表示を切り替える QLabel label = new QLabel(); label.text = "Label"; void show(QCheckBox checkBox) { label.visible = label.isVisible() ? false : true; } QCheckBox checkBox = new QCheckBox(); // QCheckBoxのtoggledシグナルに対して、コールバック関数showを接続する // QWidget.signalConnect(String signalName, dynamic callbackFunc); checkBox.signalConnect("toggled", show);
以下はボタンを押した時/離した時に、それぞれコールバック関数を実行させるサンプルコードです。
using konoha.qt4.*; void pressed(QPushButton button) { print "pressed"; print b; } void released(QPushButton button) { print "released"; print b; } QApplication app = new QApplication(); QPushButton button = new QPushButton(); button.signalConnect("pressed", pressed); button.signalConnect("released", released); button.show(); app.exec();
Webビューワ
最後に、QtWebKitを利用したサンプルとして、シンプルなWebビューワをご紹介します。
using konoha.qt4,*; class SimpleWebViewer { QUrl url; QWebView web_view; QToolButton next; QToolButton prev; QLineEdit location_bar; QHBoxLayout hbl; QVBoxLayout vbl; QWidget body; SimpleWebViewer(String u) { url = new QUrl(); url.setUrl(u); web_view = new (); web_view.load(url); next = new (); next.setArrowType(3); prev = new (); prev.setArrowType(4); location_bar = new (); hbl = new (); hbl.addWidget(next); hbl.addWidget(prev); hbl.addWidget(location_bar); hbl.addStretch(); vbl = new (); vbl.addLayout(hbl); vbl.addWidget(webView); body = new (); body.setLayout(vbl); next.signalConnect("clicked", delegate(web_view, back)); prev.signalConnect("clicked", delegate(web_view, forward)); webView.signalConnect("url-changed", delegate(this, updateLocationBar)); location_bar.signalConnect("return-pressed", delegate(this, updateWebView)); } void show() { body.show(); } void updateLocationBar(QWebView w) { QUrl u = w.url; String host = u.host; String path = u.path; _location_bar.setText(host + path); } void updateWebView(QLineEdit le) { String path = le.text; _url.setUrl("http://" + path); _web_view.load(url); } }; QApplication app = new (); SimpleWebViewer viewer = new ("http://konohascript.org"); viewer.show(); app.exec();