从GtkSpinButton中删除滚动功能
我发现GtkSpinButton对于GTKGUI上的受控输入数字非常有用。 但是这里有一些GTK按钮的好特性,在很多情况下是不需要的。 若在scrolledwindow中有GtkSpinButton,那个么用户可能会意外地更改值,或者GtkSpinButton可能会从scrolledwindow中获取滚动行为 问:有没有可能让GtkScrollButton对鼠标滚轮不敏感,就像GtkEntry一样。或者更好,GtkSpinButton可以在没有向上/向下按钮的情况下显示。 如果没有,如何将滚动信号从GtkSpinButton重定向到scrolledwindow 我试试这个:从GtkSpinButton中删除滚动功能,gtk,Gtk,我发现GtkSpinButton对于GTKGUI上的受控输入数字非常有用。 但是这里有一些GTK按钮的好特性,在很多情况下是不需要的。 若在scrolledwindow中有GtkSpinButton,那个么用户可能会意外地更改值,或者GtkSpinButton可能会从scrolledwindow中获取滚动行为 问:有没有可能让GtkScrollButton对鼠标滚轮不敏感,就像GtkEntry一样。或者更好,GtkSpinButton可以在没有向上/向下按钮的情况下显示。 如果没有,如何将滚动信
SCROLL_numgreen (GtkObject *object, GdkEvent *event, gpointer user_data)
{
switch (((GdkEventScroll *)event)->direction)
{
case GDK_SCROLL_UP:
return TRUE;
break;
case GDK_SCROLL_DOWN:
return TRUE;
break;
... etc...
但这只会“吃掉”来自GtkSpinButton的滚动信号,并在适当的位置阻止滚动窗口。
我最希望的是一些不干预每个GtkSpinButton事件的通用解决方案。这里有一些关于您的查询的提示:
这里有没有可能让GtkScrollButton对鼠标滚轮不敏感,就像GtkEntry一样?
鼠标滚轮滚动,鼠标点击都是事件。这些事件可以被掩盖。这可以在两个层次上完成
GtkWidget
级别:您可以使用,它将以的形式返回事件掩码。您可以根据需要对此进行修改,并使用GdkWindow
级别:GtkWidget
具有自己的绘图/事件区域,并与之关联。您可以使用获取此窗口的事件掩码,并根据需要返回更改&使用将其设置为GdkWindow
。您可以通过逐位操作修改事件掩码。如果在多个小部件之间共享GdkWindow
,则此掩码将影响所有小部件。对于屏蔽滚动事件,您可以查看GDK\u scroll\u MASK
,GDK\u BUTTON\u PRESS\u MASK
,GDK\u BUTTON\u RELEASE\u MASK
。您可以随时检查正在查找的事件的掩码是否已设置注意:GdkWindow
只有在为GtkWidget
创建了GdkWindow
之后,相关调用才会成功。您可以在小部件的gtk\u widget\u show()
或包含这些小部件的窗口的gtk\u widget\u show\u all
之后进行这些调用或者更好,GtkSpinButton可以在没有向上/向下按钮的情况下显示。
AFAIK
GtkSpinButton
实现为具有向上/向下按钮,指示其提供的功能。如果您不想这样做,那么您可以选择另一个小部件,比如说GtkEntry
(其中GtkSpinButton
是“派生的”)或GtkLabel
。当然,您可以根据需要创建自己的小部件(从头开始或从现有的GtkWidget
)并使用相同的小部件;没有人阻止你这么做:)
如何将滚动信号从GtkSpinButton重定向到Scrolled窗口?
可以在GtkSpinButton的
“滚动事件”
回调中执行此操作。您可以在GtkSpinButton
&returnFALSE
上停止信号发射,以传播事件
...
/* Event callback */
gboolean spinbutton_scroll_handler(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
/* Stop emission on current widget. Default handler also not called */
/* Refer http://developer.gnome.org/gobject/stable/gobject-Signals.html#g-signal-stop-emission-by-name */
g_signal_stop_emission_by_name(widget, "scroll-event");
/* Return FALSE to propagate the event further; thus scroll window will scroll
If TRUE returned other handlers not invoked for this event,
thus no scroll on scroll window */
return FALSE;
}
...
/* Connect scroll-event to the callback */
g_signal_connect(spinbutton, "scroll-event",
G_CALLBACK(spinbutton_scroll_handler),
(gpointer)0);
...
希望这有帮助 对不起,我是新来的。g_信号_停止_发射_按_名称(小部件,“滚动事件”);解决了GtkSpinButton和GtkComboBox上的所有滚动问题。这个Gtk真是太棒了!我正在尝试制作自定义小部件;)我把它放在Glade上,但我不能把它们放在编译程序上。从这一点上,我非常接近@user973238:很高兴能帮忙!:)我不知道这类问题是否允许更新,但它接近主题,我应该尝试一下。g_信号_停止_发射_按_名称在gtkSpinButtons上运行良好,但在gtkTextView和gtkTreeView上运行不正常。我可以在这里做一些(简单的)事情吗?gtkTextView将不接受鼠标滚动,并且后面的gtkScrolledWindow将表现为gtkTextView不存在。@user973238:非常抱歉响应太晚。我会检查这个,我不是很确定。请检查,我仍然没有继续这个。在GtkSpinButton上的第一个帮助下,我添加了如下开关“controlpressed”:如果(!ctrlpressed)g_信号停止发射(GTK_控件(对象),“滚动事件”);所以我有两种工作方式取决于按下ctrl键。我想用GtkTextView和TreeView获得同样的效果。当按下ctrl键时,我想滚动文本视图,当释放滚动窗口时。这可能吗?