كيف يمكنني معرفة ما GDK الأحداث المطلوبة GTK+ إشارة ؟

StackOverflow https://stackoverflow.com/questions/808338

  •  03-07-2019
  •  | 
  •  

سؤال

أنا باستخدام الفسحة-3 لبلدي تصميم واجهة المستخدم الرسومية, ولكن أستمر بالضغط على هذه المشكلة.أنا لا أرى أي شيء في GTK+ وثائق تعيين إشارات إلى أحداث أو في الفسحة-3 (3.4.5).هل هناك مكان في GTK+ شفرة المصدر أن تجد هذه المعلومات ؟

ملاحظة:من المهم في هذه المسألة أن ندرك أن الأحداث إشارات ليست نفس الشيء في GTK.

على سبيل المثال:

لدي eventbox يتطلب الأحداث التالية من أجل الحصول على الإشارات التالية.كيف يمكنني تحديد ما هي الأحداث التي تتطلبها معين الإشارة ؟

Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event
هل كانت مفيدة؟

المحلول

حسنا، أعتقد أنني أعرف ماذا يعني لك الآن، لقد وجدت هذا الجدول مطابقة تصل الإشارات جتك والأحداث جدك. ومن هنا .

نصائح أخرى

على افتراض أن كنت قد تفسر سؤالك بشكل صحيح كنت ترغب في توصيل الإشارات المحددة في الفسحة الملف إلى وظائف في التعليمات البرمجية المصدر.كيف يمكنك أن تفعل هذا يعتمد على ما إذا كنت تستخدم libglade لتحميل الملفات توليد أو GtkBuilder ، سواء متشابهة ولكن سوف نقدم عينات في ج فقط أن تكون كاملة.

باستخدام libglade يمكنك أن تفعل ذلك كما يلي:

GladeXml *xml = glade_xml_new(filename, NULL, NULL); // Load the file
glade_xml_signal_autoconnect(xml); // Connect the signals

باستخدام GtkBuilder سوف يكون مثل هذا الطقس:

GtkBuilder *xml = gtk_builder_new();
gtk_builder_add_from_file(xml, filename, NULL); // Load the file
gtk_builder_connect_signals(xml, NULL); // Connect the signals

عند استخدام GtkBuilder المعلمة الثانية في إشارة ربط وظيفة يمكن استبدال مؤشر إلى البيانات التي سيتم تمريرها إلى معالجات الإشارات.

تسير إلى الأمام أود أن أقترح استخدام GtkBuilder كما libglade هي في طريقها إلى إهمال.

الروابط

هنا روابط ذات الصلة الوثائق عن اثنين من الوظائف المذكورة أعلاه

يمكنك التقاط الأحداث مع gdk_event_handler_set()

أولا التسجيل الخاصة بك GDK معالج الحدث على بدء التشغيل:

gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);

...ثم استخدامها لطباعة أي معلومات مفيدة, و لا تنسى أن يمر هذا الحدث جتك+ من خلال gtk_main_do_event() مثل هنا:

void my_gdk_event_handler(GdkEvent *event, gpointer data)
{
    printf("Received GdkEvent of type %d", event->type);

    gtk_main_do_event(event); // Pass event to GTK+
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top