Как узнать, какие события GDK необходимы для сигнала GTK+?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Я использую Glade-3 для разработки графического интерфейса, но продолжаю сталкиваться с этой проблемой.Я не вижу ничего в документации GTK+, отображающей сигналы событий или в Glade-3 (3.4.5).Есть ли место в исходном коде GTK+, где можно найти эту информацию?

Примечание:В этом вопросе важно понимать, что события и сигналы НЕ являются одним и тем же в GTK.

Пример:

У меня есть ящик событий, который требует следующих событий для получения следующих сигналов.Как определить, какие события требуются для данного сигнала?

Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event
Это было полезно?

Решение

Хорошо, думаю, теперь я понимаю, что вы имеете в виду, я нашел эту таблицу, соответствующую сигналам gtk и событиям gdk. Вот.

Другие советы

Предполагая, что я правильно интерпретировал ваш вопрос, вы хотите связать сигналы, указанные вами в файле Glade, с функциями в исходном коде.Как вы это сделаете, зависит от того, используете ли вы libglade для загрузки генерируемых файлов или GtkBuilder, оба они похожи, но для полноты я приведу примеры на C.

Используя 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+ через 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