2009-03-15 10 views
8

私は約2年前にubuntuを使い始めたC#プログラマーです。私はCやC++のGUIプログラミングを学びたいと思っています。私はモノが本当に好きではない、私のシステムでクラッシュする傾向がある。私はC++の基本的な理解があります。私はCで働いたことはありませんが、それは涼しいです。どのツールキットを私は学ぶべきですか?それぞれのPro/Consを付ける。ありがとう!GTK +やGTKMMを学ぶべきでしょうか?

+0

OMG、Qtの...ええ、私はちょっとそれのような –

答えて

12

C++はもっと使い慣れているので、RAIIのようなイディオムを使うことができるので、GTKmmが適しているかもしれません。残念ながら、GTKmmは少し不完全で、GTKのあまり使われていない部分がいくつかありません。

GTK +は基本的に、C++で見つかったものに似たオブジェクトモデルを本質的に公開していますが、C言語の関数しかありません。 C++での構築や破壊のようなことは、C APIで明示的に行われ、ウィジェットのインスタンスはポインタを介して排他的に処理されます。

両方を試してみて、どれがプロジェクトに適しているかを確認してください。

2

あなたはQTを見ましたか?
それはいずれにせよ、私は非常場合のgtkmmをお勧めします私はgtkmmのために貢献しないので、私はバイアスで告発することができますが、私は最初のユーザーだったので...素敵なC++の設計、クロスプラットフォームおよびLGPL

+0

を試してみてくださいが、(それは理にかなっている場合)、私にはありません。 – Kredns

+7

ええ、私はあなたが意味することを知っています。私は本当にないことを意味します –

+0

@イランビランジャ:ニースワン! – Kredns

29

ですあなたはC++に慣れています。参照カウントされたオブジェクトはスマートポインタで自動的に管理されるため、gtkmmではGTK +よりもメモリ管理がずっと簡単です。また、オブジェクトを(例えばスタック上の)自動変数としてインスタンス化し、そのスコープによって寿命を決定することもできます。だから実際にはGTK +よりもgtkmmでメモリリークを避ける方がはるかに簡単です。

もう1つ巨大な gtkmmのGTK +の利点は(私の意見では)タイプセーフなシグナルフレームワークの使用です。 GTK +では、voidポインタとして渡す必要があると思われる型に常にキャストする必要があります。 gtkmmでは、これを行う必要はなく、シグナルハンドラの型安全性を強制するコンパイラを利用することができます。

C/GTK +とは別の大きな利点は、新しいクラスを簡単に導出できることです。 GTK +では、定型的なコードをたくさん作成し、基本的に言語の一部としてC++で無料で入手したもの(例えば、継承、コンストラクタ、デストラクタなど)を再実装する必要があります。これは、より退屈でエラーを起こしやすい。

greyfadeによるとgtkmmは不完全で、彼はある程度正しいです - gtkmmはGTK + APIのすべてを絶対にカバーしていません。しかし実際には、GTK +コードから直接C/GTK + APIを直接使うことができるので、これは問題ではありません。このCの互換性は、C#やPythonのバインディングなど、C++の大きな利点です。バインディングがAPIの一部をカバーしていない場合は、代替手段がありません。

gtkmm(IMO)上でGTK +を選択する唯一の理由は、gtkmmはCライブラリの上にあるラッパーであるため、少しオーバーヘッドが増えているということです(これは一般に単なる関数呼び出しです。無視できるほどの影響があります)、またはC++を嫌う人や使用できない人がいます。

+0

+1 !!!! –

16

C#プログラマーなら、Valaをご覧ください。

ほとんどのLinux GUIアプリケーションにpygtkを使用していますが、Pythonは現在作業中のプロジェクトでは遅すぎるため、GTK +とGTKmmのいずれかを選択しようとしていました。それから私はバラに会った。

これはかなり新しい言語なので、ドキュメントは現時点ではかなり制限されていますが、私はそれが両方の世界で最高のものだと思います。

2

私は行くための最善の方法は、最初に学ぶgtkmmのだろうと思います! gtkmmの基礎を学んだら、GTK +は(Cを知っていてポインタに慣れていれば)学習するのはかなり簡単です。

あなたがCを知っていない場合は、私はそれが特別に多少似ているC++用に設計されているので、あなたが最初のgtkmm学ぶことをお勧めしますデニス・リッチー

によるCプログラミング言語を読み取ることによって、すぐにそれを学ぶことができます両方ともObject Orientedなので、gtkmmはGTK +よりも最初に習得が比較的簡単です。

gtkmmの後、あなたはGTK +を学ぶことがworthwileあるので、オープンソース企業のほとんどは、むしろgtkmmのより+ GTKを使用するGTK +

に移動することができます!

+0

私はGUIプログラミングを教えるために急落したとき、 'gtkmm'は私が直面したバッフルホラー(GTK +が含まれていた)で直面しなかった場所で見た最初のGUIライブラリでした。当時私が自分自身にC++ 11を教えていたこと、そして 'gtkmm'は近代的な言語バージョン(GTK +とは違って)を使う努力をしています。そして、あなたが言ったように、GUIモデルの仕組みを理解するために 'gtkmm'を使うと、GTK +のいくつかの小さなバグを報告する必要があります.-後者は、私がそれをもう一度見た。今、私はほとんどそれを感謝します! ;-) –

3

多くが言っているように、gtkmmのが良いメモリ管理を提供し、参照オブジェクトを数え、などこれは、しかし、1つの部門で落ちるん。ドキュメンテーション。 Gtkmmプロジェクト全体は、投稿された(そして第三者のサイトに再掲載された)ドキュメンテーションは単にヘッダーファイルのjavadocスキャンである "文書化"現象に悩まされています。

あなたはあなたがどのようになっているのかを知りたがっています。例えば、Scrolled Windowは、Gtkmmのより良い文書化されたクラスの1つです。

+0

正確に言えば、 'mm'ライブラリ用のドキュメント(' gtkmm'、 'glibmm')はヘッダに書き込まれますが、通常はそこに書かれているものはGTK +/GLib/etc。ラップ(建物)の時点で '.c'ファイル。しかし、これは、例えば、Cの文書に変換がうまくいかない多くのC-ismsが含まれている場合など、上書きしてカスタム文書を書くことができます。もちろん、見つからないか、ひどく変換されたものがあれば、 'mm'ヘッダーかCのドキュメントから変換するルーチンへのパッチは、Bugzillaやメーリングリストでは大歓迎です –

関連する問題