أفتقد شيئًا واضحًا مع Glade Gtkbuilder وإشارات التوصيل. مساعدة؟

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

  •  29-09-2019
  •  | 
  •  

سؤال

أنا أصنع واجهتي مع Glade. يعمل بشكل رائع. أكتب وظيفة رئيسية صغيرة صغيرة تدعو gtkbuilder ويجعل كل شيء في ملف Glade.

Gtk::Main kit(num, opts);
// Load the GtkBuilder file and instantiate its widgets:
Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("dsg.glade", "mainwindow");

يعمل بشكل أفضل. ثم أحصل على عنصر واجهة المستخدم

Gtk::Button *sf = 0;
builder->get_widget("button", sf);

ماذا الآن؟ كل مثال وجدته لتوصيل معالج الإشارات غير مصمم بواسطة GTKBuilder. إذا قمت بتسهيل فصلك الخاص لتمثيل/معالجة/تقديم زر ، فمن السهل توصيل معالج الإشارة به ، لكنني أستخدم gtkbuilder ولا أرى كيفية كتابة وظيفة يمكنني بعد ذلك إرفاقها بعنوان عنصر واجهة المستخدم الخاصة بي ، بما أنني لم أكن الشخص الذي يقوم بإنشاء كائن الزر ، فقد كان Gtkbuilder.

هل أقوم بعمل فئة فرعية من gtkbutton اكتب وظيفتي ثم أشر إلى ذلك؟ لكن صفي لم يتم إنشاء مثيل له بواسطة GTKBuilder.

أنا فقط لا تحصل عليه. مساعدة؟

هل كانت مفيدة؟

المحلول

أنت لا تفتقد شيئًا واضحًا. يبدو أن GTKMM لا يوفر إصدار C ++ من gtk_builder_connect_signals() الوظيفة ، وهي الطريقة التي تقوم بها في C. لقد قمت بالبحث في Google قليلاً ، لكن لا يمكنني معرفة سبب تركها.

يمكنك الوصول إلى وظيفة C مباشرة مثل هذا:

Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("dsg.glade", "mainwindow");
gtk_builder_connect_signals(builder->gobj(), callback_data);

نصائح أخرى

يجب عليك استخدام فئة الأزرار الخاصة بك مثل هذا:

#ifndef _MYBUTTON_H_
#define _MYBUTTON_H_

#include <gtkmm.h>
class MyButton : public Gtk::Button { 
  public:
    inline MyButton(BaseObjectType* cobject) : Gtk::Button(cobject) {};
  protected:
    // overwrite virtual void on_pressed() function of Gtk::Button
    void on_pressed() { /* do something */ };
};
#endif

الآن في مكان ما في الكود الرئيسي الخاص بك (أضعه في صفي الأساسي الذي هو عام GTK :: Window):

MyButton *sf;
refBuilder_->get_widget_derived("button", sf);

لقد وجدت هذا في المسؤول دليل GTKMM منذ شهر واستخدامه بنجاح في تطبيقات واجهة المستخدم الرسومية.

آمل أن يساعد هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top