gpt4 book ai didi

signals - g_signal_connect swapped() 有什么作用?

转载 作者:行者123 更新时间:2023-12-03 11:14:55 26 4
gpt4 key购买 nike

根据 GObject 引用

g_signal_connect_swapped(instance, detailed_signal, c_handler, data); connects a GCallback function to a signal for a particular object. The instance on which the signal is emitted and data will be swapped when calling the handler.



我不太明白这是什么意思。这是否意味着 data将指向 instance指向的对象和 instance将指向 data 所指向的对象还是我在这里犯了错误?

如果是前者,那么这背后的逻辑是什么?

最佳答案

你理解正确。

这允许您执行以下技巧:您有一个按钮(我们称之为 button ),它应该在按下时隐藏另一个小部件(我们称之为 textview )。

然后你可以做

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

实现这一目标。当按钮被按下时,它会产生“clicked”信号,并用 textview 调用回调。作为第一个参数,和 button作为第二。在这种情况下,回调是 gtk_widget_hide()它只接受一个参数,所以第二个参数被忽略,因为这是 C 调用约定的工作方式。

它与以下相同,但更短。
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);

基本上,如果您手动编码您的界面,它可以使您不必编写额外的函数。当然,可能还有一些我从未理解的更实际的用途。

关于signals - g_signal_connect swapped() 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com