Gtk按键修改器
我试着检查控制键是否被按下,但我不能。 根据文档,我尝试以下方法:Gtk按键修改器,gtk,Gtk,我试着检查控制键是否被按下,但我不能。 根据文档,我尝试以下方法: G_MODULE_EXPORT gboolean KEYPRESS_window1(GtkWidget *window1, GdkEventKey* pKey, gpointer user_data) { guint modifiers; modifiers = gtk_accelerator_get_default_mod_mask(); g_print("modifiers %d\n", mod
G_MODULE_EXPORT gboolean
KEYPRESS_window1(GtkWidget *window1, GdkEventKey* pKey, gpointer user_data)
{
guint modifiers;
modifiers = gtk_accelerator_get_default_mod_mask();
g_print("modifiers %d\n", modifiers);
g_print("pKey->state %d\n", pKey->state);
if ((pKey->state & modifiers) == GDK_CONTROL_MASK)
{
ctrlpressed = 1;
return TRUE;
}
return FALSE;
}
信号被触发并正确通过,但逻辑不通过“如果”条件。
我想知道原因,所以请帮助。要检查Ctrl是否只是自己按下的,您需要检查按下的键的键代码。您应该能够检查事件的
keyval
字段,并检查GDK\u KEY\u Control\L
或GDK\u KEY\u Control\R
。你也可以检查hardware\u keycode
字段,但我不知道它是否可移植。g_print()语句打印什么?修饰符469762061 pKey->state 16 pKey->state根据capslock和numlock的不同而变化,因此修饰符似乎根本没有变化。修饰符
不应该变化,除非您自己更改默认的mod掩码。此代码对我有效-如果我将ctrlpressed=1
行替换为g\u print(“Ctrl-pressed\n”)
,我每次按Ctrl+g这样的组合键时都会看到Ctrl-pressed
。是的,就是这样!当我按下ctrl+G键时,它也可以工作!但我需要检查并设置“ctrlpressed”,只需按下控制键,而无需其他键。哦。。。我想我现在可以给你一个有用的答案;-)是的,使用“if(pKey->keyval==GDK_KEY_Control_L)”我的GUI可以按预期工作。为什么我以前看不到如此简单和合理的解决方案?:)非常感谢你。