C++でGTK+
-
付与されたタグ:
- GTK+
つぎはC++でGTK+を使ってみる。つまりgtkmm。
Gtk::Windowを継承してアプリケーションのクラスを作るというところで設計が違ってきた。いろいろな初期化やシグナルの登録がコンストラクタでやることになった。アプリのインスタンス内でいろんな情報を保持してくれるので楽は楽。
signalの扱いが最初面倒。sigc++を使っているが最初は何をやっているのかわからなかった。直接関数が渡せないで関数を引数としたクラスのインスタンスを作って…という流れだった。そうするとシグナルコネクションのクラスが帰ってくるのでそれを操作…という流れ。なかなかややこしいが慣れるとわかりやすい。
C++で書いたのも久しぶりなのでわけのわからんことに。生ポインタを使わないんだよねーとauto_ptrもdeprecatedってそんな話も聞いたっけなーとか。constメンバ関数なんて忘却の彼方だよーはっはっは。だけど静的にエラーをチェックするという機能においてはC++はよく考えられているなーと思った。
非常にはまったのかsignal_key_pressの処理。なぜかカーソルを拾ってくれないなーと調べたらconnectの第二引数にfalseを渡して処理する順番を変えてもらう必要があった。先に別の何かがカーソルだけは拾ってしまうようだった。window managerかな?でもなんでgtkmmで起こったんだろう?
いろいろと設計の不具合や無駄な処理がわかってきたなと思っているのでこれをなんとかする作業が必要だろう。ただanjutaはリファクタリングがまだ弱い…。