如何在长回调期间强制gtk事件
我需要一个事件来处理按下和释放我的程序工具栏上的按钮。 我使用按钮按下事件,但当我点击我的按钮时,什么也没有发生 我正在使用Glade界面设计器设计GUI。请为我解释在gtk+中何时调用按钮按下事件&这是我需要的事件吗 “按钮按下事件”应提供鼠标按钮按下。我使用gtk_widget_add_device_events()将按钮按下添加到按钮接收到的事件列表中,但我认为默认情况下应该会得到它们如何在长回调期间强制gtk事件,gtk,glade,Gtk,Glade,我需要一个事件来处理按下和释放我的程序工具栏上的按钮。 我使用按钮按下事件,但当我点击我的按钮时,什么也没有发生 我正在使用Glade界面设计器设计GUI。请为我解释在gtk+中何时调用按钮按下事件&这是我需要的事件吗 “按钮按下事件”应提供鼠标按钮按下。我使用gtk_widget_add_device_events()将按钮按下添加到按钮接收到的事件列表中,但我认为默认情况下应该会得到它们 gboolean on_skip_backward_toolbutton_pressed (GtkWid
gboolean
on_skip_backward_toolbutton_pressed (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
g_print ("pressed");
timeout_id = g_timeout_add(500, (GSourceFunc) change_freq_timeout, (gpointer) FALSE);
return FALSE;
}
gboolean
on_skip_forward_toolbutton_pressed(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
g_print ("pressed");
timeout_id = g_timeout_add(500, (GSourceFunc) change_freq_timeout, (gpointer) TRUE);
return FALSE;
}
gboolean
on_skip_toolbutton_released(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
g_print ("released");
if (timeout_id) {
g_source_remove(timeout_id);
timeout_id = 0;
}
return FALSE;
}
change\u freq\u timeout回调有一条指令,需要很长时间才能处理
在超时处理程序中运行mainiteration通常被认为是一个“坏主意”,因为它工作得不太好
是否存在可用于解决问题的其他秘密技术?是,
按钮按下事件
和按钮释放事件
是小部件的低级鼠标事件。按钮通过发出完全不同的信号来处理这些问题;对于GtkToolButton,这是单击的
。你想做什么UI?如果change\u freq\u timeout
真的卡在一条指令中,那么你首先应该如何处理事件?在GUI程序中,必须执行长时间运行的同步操作。这使得GUI可以自由地处理传入事件,直到操作完成。注意,工作线程不允许执行GTK代码;但是,它可以使用g_idle_add
通知GUI线程执行某些操作,或者通知它操作的进度。