2011年1月19日水曜日

CommonQtでHello world!

Common LispのQtバインディングであるCommonQtを触ってみました。 QtならマルチプラットフォームなのでどこでもGUIが使えます(たぶん)

Qtのチュートリアルにある以下のようなC++のコードは

// C++
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPushButton hello("Hello world!");
hello.resize(100, 30);
hello.show();
return app.exec();
}

このように書けるようです。

;; Common Lisp (CommonQt)
(asdf:load-system "qt")

(defpackage :qt-user
(:use :qt :cl)
(:export main))

(in-package :qt-user)

(named-readtables:in-readtable :qt)

(defun main ()
(let ((app (qt:make-qapplication)))
;; QPushButton は 大文字小文字を区別する
(let ((hello (#_new QPushButton "Hello world!")))
(#_resize hello 100 30)
(#_show hello)
(#_exec app))))

(main)

ほとんどC++のコードをそのまま直しても動かせそうで良い感じです。