XMLファイルから構築されたGTKウィンドウがあるC言語のグラフィックスプログラムを作成しています。このウィンドウにはそれぞれに対応するいくつかのボタンとハンドラがあります(たとえば、ボタンが "円"と表示され、 "on_circle_clicked()"というハンドラがある場合)。これらのボタンがクリックされたときにイベントを処理したい。これはどうすればいいですか?XMLファイルから構築されたgtkwidgetからのイベントの処理
0
A
答えて
2
信号処理コードはシグナルハンドラに入ります。あなたの例によると、 "on_circle_clicked"として "clicked"のシグナルハンドラを持つボタン "circle"の場合、ボタンがクリックされると、on_circle_clickedは&と呼ばれ、そのボタンをクリックする処理を行うロジックを持ちます。これを行うには、glade(使用しているXMLファイルの種類を生成する)を使用して、xmlファイルの作成中にウィジェットのシグナルハンドラの名前を追加します。これらのシグナルハンドラは、ソースコードで実装する必要があります。あなたはtheselinksが役に立ちます。ご参考のためにサンプルの下に見つけてください:gtk_builder_connect_signals
のドキュメントで述べたように
- :あなたが気をつけなければなりません
SAMPLE.C/* Compile as :gcc sample.c -Wall -Wextra -Wl,--export-dynamic `pkg-config --cflags --libs gtk+-3.0 gmodule-export-2.0` -o sample */ #include <gtk/gtk.h> void on_circle_clicked(GtkButton * b, gpointer data) { (void)b; (void)data; printf(" Circle clicked\n"); } int main(int argc, char **argv) { GtkBuilder *builder; GtkWidget *window; GError *err = NULL; const char *builder_file = "sample.glade"; gtk_init(&argc, &argv); builder = gtk_builder_new(); if (gtk_builder_add_from_file(builder, builder_file, &err) == 0) { fprintf(stderr, "Error adding builder from file %s\n%s\n", builder_file, err->message); return -1; } gtk_builder_connect_signals(builder, NULL); window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); if (window == NULL) { fprintf(stderr, " Object window not found\n"); return -2; } gtk_widget_show_all(window); gtk_main(); return 0; }
sample.glade
<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkWindow" id="window"> <property name="can_focus">False</property> <property name="title" translatable="yes">Glade sample</property> <property name="has_resize_grip">False</property> <signal name="destroy" handler="gtk_main_quit" swapped="no"/> <child> <object class="GtkButton" id="circle"> <property name="label" translatable="yes">circle</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_action_appearance">False</property> <signal name="clicked" handler="on_circle_clicked" swapped="no"/> </object> </child> </object> </interface>
物事を、あなたのプログラムを
-Wl,--export-dynamic
でコンパイルする必要があります。Linux/Unix上のCフラグ& link togmodule-export-2.0
。 Windowsでは、シグナルハンドラの前にG_MODULE_EXPORT
を追加する必要があります。 - シグナルハンドラのシンボルが検索されると、はは(GCCとの「隠された」として機能するために可視属性を設定例えば)
static
機能や非表示としての機能を、それをしない
お役に立てれば!
関連する問題
- 1. あらかじめ構築されたWARからのGradle EARの構築
- 2. モバイルスパークコンポーネントから送出されたASファイル内のイベントを処理します
- 3. アクセスデータベースから構築されたDatagridview - コンボボックス
- 4. vb.netからIronPythonでスローされたイベントを処理します。
- 5. 保存されたXML値から新しいXMLを構築する
- 6. 弱い構造化されたXMLファイルからのデータ抽出
- 7. APIからのXML出力の処理
- 8. 反復処理XMLファイルとそれから
- 9. 個別に構築された反応コンポーネントからjqueryとハンドルバーを使用してレンダリングされたボタンのイベントを処理する方法は?
- 10. あらかじめ構築された地理エンティティのLuis.ai同義語
- 11. Mavenのは、WEB-INFフォルダからいくつかの.xmlファイル除外を構築
- 12. ファイルメニューからイベントを処理する
- 13. エラーメッセージドッキングウィンドウのイメージ構築しながら、 "エラー処理tarファイルを(終了ステータス1)"
- 14. バイナリツリーがファイルから再構築されない
- 15. GroovyのXML処理構文
- 16. 与えられたポストオーダートラバーサルからのBSTの構築
- 17. Matplotlib - リスト内のアイテムから構築されたポイントラベル
- 18. はPerlのハッシュからXMLスキーマを構築しますか?
- 19. infopathから構築されたシェイプフォームは安全ですか?
- 20. バインドされたキャンバスWPFのイベント処理
- 21. jspファイルからjnlpを構築する
- 22. ファイルからツリーを再構築
- 23. URLからのパラメータを無視したイベント処理
- 24. 動的に生成されたボタンからイベントを処理する方法#
- 25. Python構造体からXMLを構築する
- 26. コマンドラインからのemacsの実行とロックされたファイルの処理
- 27. wavファイルまたはあらかじめ処理された生のオーディオバッファからの音声認識
- 28. マップされたオブジェクトからのエンティティの更新の処理
- 29. Meteor:#eachでラップされたオブジェクトから生成されたイベントを処理しますか?
- 30. マクロの構築と処理のベストプラクティス
GTK(C API)、またはGTKmm(C++バインディング)を使用していますか? – liberforce
私はGTKを使用しています。これはコードです: –
void initGuiWindow() { ビルダー= gtk_builder_new(); gtk_builder_add_from_file(ビルダー、 "assignment1gui.xml"、(GError **)NULL); ウィンドウ= GTK_WIDGET(gtk_builder_get_object(builder、 "window")); gtk_builder_connect_signals(ビルダー、NULL); } –