私は約 2 年前に ubuntu を使い始めた C# プログラマーです。C または C++ で GUI プログラミングを学びたいと思っています。mono はあまり好きではありません。システムでクラッシュする傾向があります。C++ の基本的な理解があります。私は C で作業したことはありませんが、クールに見えます。どのツールキットを学習/使用する必要がありますか? それぞれの長所/短所を与えます。ありがとう!
7 に答える
私は gtkmm への貢献を支援しているので偏見で非難される可能性がありますが、私はもともとユーザーだったので... いずれにしても、C++ に慣れている場合は gtkmm を強くお勧めします。参照カウントされたオブジェクトはスマート ポインターで自動的に管理されるため、メモリ管理は GTK+ よりも gtkmm の方がはるかに簡単です。また、オブジェクトを auto 変数としてインスタンス化し (スタック上など)、有効期間をスコープによって決定することもできます。したがって、実際には、GTK+ よりも gtkmm の方がメモリ リークを回避する方がはるかに簡単です。
GTK+ に対する gtkmmのもう 1 つの大きな利点 (私の意見では) は、タイプ セーフなシグナル フレームワークの使用です。GTK+ では、何かを常に void ポインターとして渡し、それらを本来あるべき型にキャストする必要があります。gtkmm では、これを行う必要はなく、シグナル ハンドラーに型安全性を適用するコンパイラを利用できます。
C/GTK+ に対するもう 1 つの大きな利点は、新しいクラスを簡単に派生できることです。GTK+ では、多くのボイラープレート コードを記述し、基本的に言語の一部として C++ で無料で入手できるもの (継承、コンストラクタ、デストラクタなど) を再実装する必要があります。これはより面倒で、エラーが発生しやすくなります。
grayfade は gtkmm が不完全であると述べましたが、彼はある程度正しいです -- gtkmm は GTK+ API のすべてを完全にカバーしているわけではありません (非常に近いものですが)。しかし、実際にはこれは問題ではありません。なぜなら、いつでも gtkmm コードから直接 C/GTK+ API を使用できるからです。この C との互換性は、API の一部をカバーしていない場合に代替手段がない C# や python バインディングなどに比べて、C++ の大きな利点です。
gtkmm (IMO) よりも GTK+ を選択する唯一の本当の理由は、gtkmm は C ライブラリのラッパーであるため、オーバーヘッドが少し増えることです (ただし、これは通常、単一の関数呼び出しであり、影響はほとんどありません)。 、または C++ が嫌いまたは使用できない場合。
C# プログラマーなら、Valaを見てみましょう。
Linux GUI アプリケーションのほとんどで pygtk を使用していますが、現在取り組んでいるプロジェクトには Python が遅すぎるため、GTK+ と GTKmm のいずれかを選択しようとしていました。それから私はヴァラに会いました。
これはかなり新しい言語であるため、現時点ではドキュメントがかなり限られていますが、C# の構文と C の速度という両方の長所を備えていると思います。
C++ の方が馴染みがあり、RAII のようなイディオムを使用できるため、GTKmm の方が適していると思われるかもしれません。残念ながら、GTKmm は少し不完全であり、GTK のあまり使用されない部分がいくつか欠けています。
ただし、GTK+ 自体は、基本的に C++ で見られるものと同様のオブジェクト モデルを公開しますが、C 関数のみを使用します。C++ での構築や破棄などは C API で明示的に行われ、ウィジェットのインスタンスはポインターのみを介して処理されます。
両方を試して、どちらがプロジェクトに適しているかを確認してください。
多くの人が言っているように、Gtkmmは優れたメモリ管理や参照カウントオブジェクトなどを提供します。ただし、1つの部門に分類されます。ドキュメンテーション。Gtkmmプロジェクト全体は、「ドキュメント化されていない」現象に悩まされています。この現象では、投稿された(およびサードパーティのサイトに再投稿された)ドキュメントは、ヘッダーファイルのjavadocスキャンにすぎません。
自分が何に入るのかを知ってほしかった。たとえば、スクロールウィンドウはGtkmmでよりよく文書化されたクラスの1つです。
geditでvalaを学ぶことをお勧めします。
http://www.valaide.org/doku.php:vala _
https://launchpad.net/valable:Eclipse _
Qtを見たことがありますか?
素晴らしい C++ デザイン、クロス プラットフォーム、LGPL です。
最初に gtkmm を学ぶのが最善の方法だと思います。gtkmm の基本を理解すれば、GTK+ はかなり簡単に習得できるはずです (C の知識があり、ポインターに慣れている場合)。
C を知らない場合は、Dennis Ritchie の The C Programming Language を読むとすぐに学習できます。
gtkmm は C++ 用に特別に設計されているため、最初に gtkmm を学習することをお勧めします。C++ はどちらもオブジェクト指向であるため、C# に多少似ています。そのため、gtkmm は GTK+ よりも最初に学習する方が比較的簡単です。
gtkmm の後、GTK+ に進むことができます
オープンソース企業のほとんどは gtkmm ではなく GTK+ を使用しているため、GTK+ は学ぶ価値があります。