gpt4 book ai didi

c - GTK 无法识别按键释放事件

转载 作者:行者123 更新时间:2023-11-30 17:59:25 24 4
gpt4 key购买 nike

我正在编写一个 C 程序来控制 ARDrone,并且希望只要按下某个键,无人机就会移动,并且当不再按下该键时,我希望它停止移动。我将 key_press_event 和 key_release_event 附加到我创建的窗口,这是回调函数:

gint key_press_cb(GtkWidget *widget, 
GdkEventKey *kevent,
gpointer data)
{
unsigned int key;
int res;

/* While a key is pressed the drone moves,
* when the key is released it is put back into hover mode */
if(kevent->type == GDK_KEY_RELEASE) {
// Hover mode
printf("--- Hover Mode ---\n");
ardrone_at_set_progress_cmd(0, 0, 0, 0, 0);
//res = keyboard_update(BACKSPACE);
} else if(kevent->type == GDK_KEY_PRESS) {

key = kevent->keyval;
g_message("Key pressed: %c [%d]", key, key);

res = keyboard_update(key);
}

return TRUE;
}

如果我按住按键很短一段时间,我会收到按键释放事件,但是当按住按键超过 2 秒时,我将不会看到按键释放事件。我想这可能是因为我在按住某个键的同时不断收到 key_press_events ;有什么办法可以禁用重复吗?

最佳答案

您可以尝试以下方法

void gtk_widget_add_events(GtkWidget* widget, gint event_mask);

其中event_mask应该是GDK_KEY_RELEASE_MASK | GDK_KEY_PRESS_MASK您还应该在 key-release-event

上触发事件处理程序

要获得更详细的答案,需要更多代码和输出信息。

关于c - GTK 无法识别按键释放事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474874/

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