Qt/GTK のようなフレームワークを開発する
-
06-07-2019 - |
質問
私は現在、最低限の Qt/GTK+ のようなフレームワークの開発を開始することを考えていますが、このプロジェクトの作成を開始する前にいくつか知っておきたいことがあります。
- GTK+ と Qt の構造は何ですか?
- 独自のフレームワークを構築するにはウィンドウ マネージャーを開発する必要がありますか?
- 始めるためのリソースはありますか?
解決
それは、少なくとも開始プロジェクトとしては、大きな仕事のように思えます。
「構造」の意味がわからないの例GTK +。 GTK +のオブジェクト階層を見ることができます。実装されたオブジェクト(GTK +はオブジェクト指向API)が互いにどのように関連しているか。その情報から、コードの構造を推測できます。
いいえ、独自のウィンドウマネージャを作成する必要はありません。ツールキットは、ウィンドウ管理自体ではなく、ウィンドウの内部で発生することを主に考慮しています。もちろん、「プラットフォーム」を決定することもできます;より広い範囲を持ち、WMを含める必要があります。
他のヒント
GUI/アプリケーション フレームワークの開発は重要な作業です。なりたいかもしれません とても なぜさらに別のフレームワークを作成する必要があるのかが明確になります。
あなたが言及したプロジェクトは両方ともオープンソースです。そこから始めてみませんか?
- GTK:git clone git://git.gnome.org/gtk+
- Qt:git clone git://gitorious.org/qt/qt.git
エド GTK と Qt の構造は何なのか、独自のウィドウ マネージャーを作成する必要があるのかどうかを尋ねます (答え:いいえ)と開始方法。少なくとも最初の 2 つに対する答えはソース コードにあります。どの分野の優れた実践者も、他の人を見て学ぶということを忘れないでください。コードを読むことも例外ではありません。
GUI /アプリフレームワークを書くことは素晴らしい学習体験になりますが、かなり小さなアプリフレームワークでさえ非常に大きな仕事であり、他のいくつかのフレームワークを使用してアプリケーションを書くのにかなり熟練するまで本当に取り組むべきものではありませんおよびウィジェットツールキット。
この10年の早い時期に、このようなことを一度やったことがあります。それは、私がMacで15年以上、Windowsで10年以上プログラミングし、ネイティブグラフィックス、イベント、ウィジェットAPI、およびPowerPlant、MFCなどのさまざまなオブジェクト指向ツールキットの両方に直接プログラミングした後のことです、およびMacApp。 PalmOSアプリケーションでの作業を開始したとき、PowerPlantでモデル化された非常に小さなアプリケーションフレームワークを書くのに数週間を費やしました。しかし、非常に多くのGUIシステムを使用した数十年にわたる幅広い深い経験なくして、私はまったく成功しませんでした。
Linux / X11でこれを行うのはさらに手間がかかります。これは、Mac OSやWindowsとは異なり、X11もLinuxも組み込みのユーザーインターフェイスウィジェットを提供していないか、グラフィックスプリミティブやテキストレイアウト機能を提供しているためです。 GTK +はGNOMEエコシステムの一部です。ウィジェットを提供し、GObjectからメッセージキューと内部通信を取得し、X11とのグラフィックおよびイベント通信を抽象化および簡素化するためにGDKに依存し、テキストのレンダリングとレイアウトにPangoとCairoを使用します。私はすべてそのシステムを使って仕事をしていますが、それは恐らく多くの本当に頭の良い人たちによる何十年ものハードワークを表しています。 Qtも非常に似ていると思います。
したがって、本当にこれを実行したい場合は、以下をお勧めします。
- 複数のオペレーティングシステム上で、さまざまなアプリとウィジェットツールキットの多くを使用してプログラムを作成します。これは、このようなシステムがどのように機能するかだけでなく、なぜシステムがそのまま設計されているかを学ぶのに役立ちます。そして、何がうまくいくのか、何がうまくいかないのかを感じることができます。
- 1つまたは複数のさまざまなオープンソースフレームワークにバグ修正または新機能を提供します。 GTK +には、初心者が取り組むタスクのリストがあります。もう1つの優れたオープンソースフレームワークは、 wxWidgets です。
- エキスパートレベルのC / C ++プログラマになります。
これを数年間行った場合、独自のフレームワークに取り組むのに適した専門知識が得られます。
ここでの回答のいくつかは少し誇張していると思います。明らかに、QtやGtkと同じ品質、幅、深さのものを作成することは、大きな挑戦です。しかし、よりシンプルなものを作成し、それがどのように機能するかについて多くを学ぶことができます。私は大学でやったように行うことをお勧めします。 GlutでOpenGLを使用します。次に、基本的な描画機能とイベントシステムを既に用意しました。次に、ボタン、テキストフィールドなどのクラスを作成する必要があります。
本当にシンプルにしたい場合、各コンポーネントはどこに描画されているかを知る必要があり、マウスクリックが中かどうかをチェックする境界ボックスが必要です。また、ボタン、チェックボックスなどがクリックされたことをコードの残りの部分に伝えることができるシステムを作成する必要があります。
これは、実際にここにいるロケット科学者ではありません。ゲームは長年にわたって独自の非常にシンプルなGUIツールキットを作成してきました。あなたもそのアプローチを試すことができます。ゲームエンジンの上にシンプルなGUI takeitをモデリングしたことがあります。ボタンとテキストフィールドは単純にスプライトにすることができます。
しかし、Gtk +やQtと競合するものを作りたいなら、それを忘れてください。それは長年にわたるチームの努力です。