トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

wxWidgets

[C++]

wxWidgets

 wxWidgets入門

wxWidgetsとは?
クロスプラットフォームのGUIアプリケーション作成用ライブラリである

この表題自体説明が必要だろう。まず、

クロスプラットフォーム
様々なOS上で動作すること
GUI
グラフィカルユーザインタフェース

である

コマンドプロンプトで動くようなプログラムがCUI, 普段我々がWindowsで使っているようなアプリケーションがGUI、ブラウザもExcelもみんなGUIアプリケーションである。

  • 使用言語はC++で、各プラットフォームの機能(ウィンドウの描画、テキストボックスの呼び出し、HTTPによる通信)を同一のコードで表現できるようになっている。
  • 同じようなライブラリとして Qt, GTK+, FLTK, Tcl/Tk, FOXのようなものがある。
  • このようなGUIアプリケーション作成用ライブラリの利点は、OS直結の低レイヤな言語仕様を覚えなくていい点だ。
  • それは様々な設定が出来る代わりに、人間が覚えられる範疇を超えた関数と引数の知識が必要になる。
  • (※例えばWIN32やX11、OpenGLのような低レイヤを扱うライブラリを使った場合、ウィンドウに画像を載せて表示させるだけで日が暮れるだろう。)

wxWidgetsも結局はWin32のAPIをラッピングしているに過ぎない。そして、wxWidgetsの目的は様々なGUIライブラリを同一コードから操るということなのだ。

 wxWidgetsの利点・欠点

利点

独自のライセンスwxWindows Licenseを持ち、開発したアプリケーションのソースコードを開示せず商用目的で使用することが可能
wxWindows Licenseの日本語訳は右のリンク[http://sourceforge.jp/projects/opensource/wiki/licenses%2FwxWindows_Library_License]大事なのは第二項「2. この例外により、あなたはライブラリを基にしたバイナリ・オブジェクト・コード・バージョンの成果物を、ユーザ独自の条件に基づいて使用、複製、リンク、変更、および頒布することができます。」つまり、wxWidgetsのライブラリをリンクして作ったバイナリについては煮るなり焼くなり好きにしていいということだ。LGPLベースのライセンスなのにこれでいいのか・・・?と言った感じだが(2.9.4のライセンス文にはあのリチャード・ストールマンが"アドバイス"してくれたという旨が書かれている。リチャード・ストールマンからしたらこんなライセンスは自由ではないと言いたいのでしょう。しかしこれはソースコードを開示したくない個人・企業にとっては嬉しい話ですね。)
同じコードで様々な環境で使えるアプリケーションが作れる(Windows, Linux, Mac)
バージョンが3.0になり、すでに枯れている。なおかつ開発が続いている。
Javaと違ってネイティブなGUIが描画できる
※最近はJavaもSwingのネイティブ描画モードが使えたり、SWTならば最初からネイティブなGUIが使える。
バイナリが他のライブラリに依存しない場合ユーザーのコンピューターに何の準備もいらない
静的リンクすればexeファイル単体での配布も可能、JavaだとJRE…Javaのランタイムが必要になる、とは言っても今の時代Java入れてないPCなんて無いでしょうが
クラスの形式がどちらかと言うとJavaに近い、Java使いなら違和感なくコーディングできる。成熟したオブジェクト指向。
逆に言うとバリバリのC++的な使い方をしたい人には不向きか、しかしGUIプログラミングというのはOSの環境に左右されるため最新の言語仕様に従ったかっこいい書き方はなかなかできないのが実情です
言語バインディングの数がかなり多い
python, perl, php, java, lua, lisp, erlang, eiffel, C#(.NET), BASIC, rubyそしてJavascript
可能な限り、wxWidgetsはプラットフォーム固有のSDKを使用し、システムが用意したウィジェットを使用する
これはWindowsでコンパイルしたプログラムがWindowsのプログラムのルックアンドフィールを保持し、LinuxのマシンでコンパイルしたプログラムがLinuxのプログラムのルックアンドフィールを保つことを意味する。

欠点(ユーザ的視点)

出来上がったファイルが大きい
Windows/Mac OS Xの場合出来上がるファイルサイズがなかなか大きい(ライブラリ同梱で100MBはある)
記述言語がC++、古い
そんなことはない。C++11の新しい機能を使えば、Scala、Rubyに負けない気がする。モダンなC++を書こう!というかC++が古いという考えがおかしい
C++で満足できない場合、言語バインディングが使える
wxPerl, wxRuby, wxPythonなどなど。個人的にはwxPythonが一番盛り上がっているしサポートが厚い気がする。逆に他の言語バインディングはイベントハンドリングなどに不安がある。
日本語入力できない
UTF-8で記述すれば日本語もOK、 wxString = wxT("ほげほげ"); で行ける。
簡単に使えるデバッグ環境が無い
MSVCだとデバッグ簡単,gdbはちょっと素人には難しい。でも勉強すればできるよ!
日本語のリファレンスが少ないので学習には英語必須
正直C#やJavaのほうが簡t…
正直な所Makefile書いたりコンパイルするのがめんどk...

欠点(プログラマ的視点)

APIはかなり多いが、完全なクロスプラットフォーム性を確保できない場合がある
あるプラットフォームでは動くが、あるプラットフォームでは動かないAPIが結構ある
Mac OS Xでの動作が不安定
というよりCocoaフレームワークがかなりクソ、詳しくは別項で扱いたい

 よくある疑問・批判

生成されたバイナリデカすぎでしょ~、80MBとかふざけてんの? 

→ gccのコンパイルオプション使え「-s」とか「strip」とか、8MBぐらいには縮まる
→ Windowsの場合VC++でコンパイルすればバイナリサイズは小さくなるし、Linux, Macだと最初から小さい

・コンパイル遅い

→ make -j で並列コンパイル
→ というかC++のコンパイルの遅さは最近私もガマンできない、D言語書きましょう!

・GUIのデザインが意味不明、なんだよサイザーって、聖帝十字陵?

→ それはサウザー

GUIのデザインはたしかに面倒。オススメのツールを以下に

http://wxglade.sourceforge.net/ wxGlade a GUI builder for wxWidgets

・eclipse以外に統合開発環境ない?

→ CodeBlocksとかwxDev-C++とか、そんなことよりEmacsという最強エディタがあるらしいですよ…(ステマ)

・そもそもC++をWindowsで書くのが苦行

 → あなたと Debian, 今すぐダウンロード(下のリンクから)
 → MinGWパッケージを使ったクロスコンパイルも可能なんだ

 wxWidgetsを知るには

本家ホームページ

http://www.wxwidgets.org/

wxWidgetsのリリースの告知、元ソースの安定版・最新版ダウンロードができる

Googleのグループ

開発者向けメーリングリストhttp://groups.google.com/group/wx-dev

実際のコミッタ(wxWidgetsの公式版を作ってる人たちのグループ)

ユーザー向けメーリングリスト

https://groups.google.com/group/wx-users

wxWidgetsを使うユーザーたちのグループ

公式掲示板

http://forums.wxwidgets.org/

わりと初心者が質問しているので参考になるはず(※ただし英語)。

最新のクラスリファレンス

http://docs.wxwidgets.org/trunk/

あと数年前にwxWidgetsの本が出ています。処理系のクラスについては内容が薄いです、またこの本が出た以降のクラスについても記述が無いです。しかしながら基本的なクラスの使い方についてのHow to本としては申し分ないです。(…ネット上のどこかでPDFになった奴が転がってた気がするが、あれは気のせいだろう。)

お名前: コメント: