Что делает g_signal_connect_swapped (), делают?

Согласно ссылке GObject

g_signal_connect_swapped (экземпляр, detailed_signal, c_handler, данные); подключает функцию GCallback к сигналу для конкретного объекта. Экземпляр, на котором сигнал испускается и данные, будет подкачан при вызове обработчика.

Я не вполне получаю то, что это означает. Делает это означает что data укажет на объект, которым указываютinstance и instance укажет на объект, которым указали data или я делаю ошибку здесь?

Если прежний имеет место тогда, какова логика позади этого?

23
задан 6pack kid 31 January 2010 в 12:57
поделиться

1 ответ

Вы правильно понимаете.

Это позволяет вам делать трюки, такие как следующее: у вас есть кнопка (давайте назовем ее кнопкой ), которая должна скрывать другой виджет (давайте назовем его TEXTVIEW ), когда нажата.

Вы можете сделать

g_signal_connect_swapped(button, 'clicked', G_CALLBACK(gtk_widget_hide), textview);

для достижения этого. Когда кнопка нажата, она генерирует сигнал «нажатия», а обратный вызов вызывается с помощью TextView в качестве первого аргумента, а кнопка как вторая. В этом случае обратный вызов GTK_WIDGET_HIDE () , который принимает только один аргумент, поэтому второй аргумент игнорируется, потому что это то, как работает Calling Convention.

Это так же, как следующее, но короче.

static void
on_button_clicked(GtkButton *button, GtkWidget *textview)
{
    gtk_widget_hide(textview);
}

...elsewhere...

    g_signal_connect(button, 'clicked', G_CALLBACK(on_button_clicked), textview);

В основном это экономит вас от необходимости написать дополнительную функцию, если вы передаете свой интерфейс. Конечно, может быть некоторое гораздо более практичное использование, которое я никогда не понимал.

40
ответ дан 29 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: