Я скучаю с чем-то очевидным с Glade GtkBuilder и соединительными сигналами. Помощь?

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

  •  29-09-2019
  •  | 
  •  

Вопрос

Я делаю свой интерфейс с поляной. Работает отлично. Я пишу крошечную маленькую основную функцию, которая называет 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 :: Окна):

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

Я нашел это в официальном GTKMM руководство Несколько месяц назад и успешно используя его в моих приложениях GUI.

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top