[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の日本語訳は右のリンク https://licenses.opensource.jp/大事なのは第二項「2. この例外により、あなたはライブラリを基にしたバイナリ・オブジェクト・コード・バージョンの成果物を、ユーザ独自の条件に基づいて使用、複製、リンク、変更、および頒布することができます。」つまり、wxWidgetsのライブラリをリンクして作ったバイナリについては煮るなり焼くなり好きにしていいということだ。
- LGPLベースのライセンスなのにこれでいいのか・・・?と言った感じだが
- (2.9.4のライセンス文にはあのリチャード・ストールマンが"アドバイス"してくれたという旨が書かれている。
リチャード・ストールマンからしたらこんなライセンスは自由ではないと言いたいのでしょう。しかしこれはソースコードを開示したくない個人・企業にとっては嬉しい話ですね。) - 2022年3月21日 若干言い過ぎだったので訂正。wxWindowsライセンスについてのコメントは https://www.wxwidgets.org/about/licence/ で見られます。
- (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++が古いという考えがおかしい
2022年3月21日:やっぱC++はもう古い気はする。electronとか使おうぜ。
- C++で満足できない場合、言語バインディングが使える
- wxPerl, wxRuby, wxPythonなどなど。個人的にはwxPythonが一番盛り上がっているしサポートが厚い気がする。逆に他の言語バインディングはイベントハンドリングなどに不安がある。
- 日本語入力できない
- UTF-8で記述すれば日本語もOK、 wxString = wxT("ほげほげ"); で行ける。
- 簡単に使えるデバッグ環境が無い
- MSVCだとデバッグ簡単,gdbはちょっと素人には難しい。でも勉強すればできるよ。
- 日本語のリファレンスが少ないので学習には英語必須
- 正直C#やJavaのほうが簡t…
- 正直な所Makefile書いたりコンパイルするのがめんどk...
欠点(プログラマ的視点)
- APIはかなり多いが、完全なクロスプラットフォーム性を確保できない場合がある
- あるプラットフォームでは動くが、あるプラットフォームでは動かないAPIが結構ある
wxWidgetsを知るには
本家ホームページ
wxWidgetsのリリースの告知、元ソースの安定版・最新版ダウンロードができる
Googleのグループ
開発者向けメーリングリストhttp://groups.google.com/group/wx-dev
実際のコミッタ(wxWidgetsの公式版を作ってる人たちのグループ)
ユーザー向けメーリングリスト
https://groups.google.com/group/wx-users
wxWidgetsを使うユーザーたちのグループ
公式掲示板
わりと初心者が質問しているので参考になるはず(※ただし英語)。
最新のクラスリファレンス
http://docs.wxwidgets.org/trunk/
あと数年前にwxWidgetsの本が出ています。この本が出た以降のクラスについては記述が無いです。しかしながら基本的なクラスの使い方についてのHow to本としては申し分ないです。