空き地/ Gtkbuilderでカスタムウィジェットを使用します
-
25-09-2019 - |
質問
私はのGtkとグレイドを使用してアプリケーションを開発しています。私の印象では、それはあなたのメインウィンドウのためのGtkWindowのサブクラスを作成するのが一般的だということですが、私はGtkBuilder定義から私のサブクラスを作成する方法をでこだわっています。い、誰のノウハウ?
解決
GtkWindow
をサブクラス化することは、あなたが使用していたどの言語については言及しなかった平野C.あなたにあるよりも、GTKのさまざまな言語バインディングでより一般的です。
の方法は、CにおけるIサブクラスGtkWindow
はGladeの中にウィンドウの内容を作成することですが、のないのウィンドウ自体、と述べました。グレード3で(IIRC)あなたは、パレットでウィジェットを右クリックして、コンテナなしで非トップレベルのウィジェットを配置するために、「トップレベルとウィジェットの追加」を選択することができます。
GtkWindow
のサブクラスのためのその後の書き込みコード、のはMyAppWindow
それを呼びましょう。 GObjectのマニュアルの例の多くがあるので、私はこの答えにそれに入ることはありません。 init関数(my_app_window_init()
)グレイドファイルをロードするには、使用gtk_builder_get_object()
は、あなたが構築されているウィンドウに追加し、最も外側のグレイドファイル内のウィジェット、および使用gtk_container_add()
へのポインタを取得します。その後、通常どおりにgtk_builder_connect_signals()
を使用します。
あなたはグレイドでそれを行うことができないので、手動でこのようにすべてのウィンドウのプロパティを設定する必要がありますが、私が見つけたものよりも、他のそれはかなりうまく動作します。
他のヒント
それは、サブクラスのGtkWindowに一般的ではありません。
私はgtkbuilder定義から作成したトップレベルのウィンドウをサブクラス化することが可能であるとは思わない。
gtkbuilder作成する前に、サブクラス化されたウィジェットについて知っている必要があります。
あなたが本当にのGtkWindow ptomatoの独自のサブクラスを作成する場合は十分に基本的な手順を説明します。あなたのカスタムウィジェットを利用できるようにする空き地のためのプラグインを作成することも可能です。しかし、これは非常に簡単ではありません、そして最も可能性が高いではない、あなたが何をしたいのか。
ほとんどのアプリケーションでは、唯一のそれらのいずれかをサブクラス化せずに標準のウィジェットを使用しています。そして、(他のいくつかのRADツールのように)あなたのGUIのための特別なクラスを持っている必要はありませんgtkbuilder(またはlibglade)との空き地ファイルをロードする代わりに、あなただけのオブジェクトのセットを取得します。 APIを使用すると、名前でそれらを見て(とウィンドウは基本的にはそれらのひとつである)ことができます。一般的なアプローチは、あなたと対話し、プログラムの起動時に、グローバル変数に保存しようとしているすべてのウィジェットを検索することです。それとも、あなたがそれらを格納する構造体を作成することができ、ウィンドウの複数のインスタンスを必要としています。それとも、単純な検索をすることができ、あなたがそれらを必要とするたびにウィジェットた場合。あなたが取得するオブジェクトのセットは完全に動的であることに注意してください。あなたがプログラムでGUIを作成した場合と同じようにあなたは、たとえば異なるウィンドウ間でウィジェットを移動することができます。