我的條形碼掃描器的作用就像是一串數字鍵盤。我希望它一直工作,所以我不使用文本輸入,而是連接到我的窗口的按鍵事件。不幸的是,當其他文本條目關注時,這也會發出。 AFAIK,因爲Windows首先接收事件,檢查快捷方式,然後傳遞它們。如果沒有小部件處理它們,是否有東西傳播回窗口?我該如何處理其他小部件不需要的鍵盤事件?
1
A
回答
2
我會貼的gtk_window_key_press_event()是如何工作的一個總結:
gboolean
gtk_window_propagate_key_event (GtkWindow *window,
GdkEventKey *event)
{
gboolean handled = FALSE;
focus = window->focus_widget;
while (!handled)
{
GtkWidget *parent;
handled = gtk_widget_event (focus, event);
focus = gtk_widget_get_parent (focus);
}
return handled;
}
static gint
gtk_window_key_press_event (GtkWidget *widget,
GdkEventKey *event)
{
GtkWindow *window = GTK_WINDOW (widget);
gboolean handled = FALSE;
/* handle mnemonics and accelerators */
if (!handled)
handled = gtk_window_activate_key (window, event);
/* handle focus widget key events */
if (!handled)
handled = gtk_window_propagate_key_event (window, event);
/* Chain up, invokes binding set */
if (!handled)
handled = GTK_WIDGET_CLASS (gtk_window_parent_class)->key_press_event (widget, event);
return handled;
}
這基本上意味着:
看看,關鍵是適合助記符(即有下劃線標籤)或加速器(來自GtkAccelGroup)。
從關注的小部件開始,沿着容器層次結構開始,看看有些小部件是否處理了按鍵。
將按鍵傳遞給GtkWindow的父類。最接近的處理GtkWidget的父節點是通過處理綁定(來自gtk_binding_entry_add())來完成的。
正如你所說的,只是做的g_signal_connect()來的GtkWindow的按鍵事件信號會給你所有按鍵時爲焦點窗口發生。
嘗試做g_signal_connect_after()代替。這將有效地爲上述序列添加另一個回退 - 這意味着「在默認的處理器之後運行我的信號處理程序」。請注意,您將捕獲所有未處理的按鍵(例如,如果有人按下了應用程序無法處理的功能鍵),所以不要認爲通過您的處理程序的唯一內容來自您的條形碼掃描儀。
0
嘗試配置您的條形碼掃描儀送說ALT位數(或類似),而不是數字的條形碼號碼,這將在這個過濾
+0
沒有掃描儀默認爲ALT,也沒有最終用戶知道如何配置掃描儀。依靠計時和校驗和來區分條形碼和其他輸入工作正常。 – Tobias
相關問題
- 1. 不能處理鍵盤事件android
- 2. 如何停止處理其他事件
- 3. 我如何處理JavaScript的LimeJS鍵盤事件對HTML5
- 4. 鍵盤筆畫的事件處理
- 5. iPad的關閉鍵盤事件處理
- 6. Python中的鍵盤事件處理?
- 7. 我應該如何處理CONNECT事件?
- 8. 我應該如何處理Button事件?
- 9. 我應該如何處理pushsubscriptionchange事件?
- 10. 我應該如何處理J2ME中的關鍵事件?
- 11. Zimra - 我如何處理按鍵事件?
- 12. 爲什麼我的一些鍵盤事件起作用而其他鍵盤事件不起作用?
- 13. 處理複合小部件的事件
- 14. 在可可上處理鍵盤事件
- 15. 在python中處理鍵盤事件
- 16. Android:鍵盤事件處理程序
- 17. 紅寶石鍵盤事件處理
- 18. Flex帆布鍵盤事件處理
- 19. 孩子小部件應該處理自己的事件嗎?
- 20. 如何正確處理快捷鍵和鍵盤事件?
- 21. Form OnClick事件處理程序 - 如何重疊其他事件處理程序?
- 22. UI其他類的事件處理
- 23. 如何處理NSViewController的子類中的鍵盤事件?
- 24. 你如何處理linux中的鍵盤事件?
- 25. [tablet] [fragment]如何處理隱藏的事件軟鍵盤
- 26. 如何在Qt中處理所有子窗口小部件的按鍵事件?
- 27. 如何處理jQuery UI小部件中的事件
- 28. 如何處理自定義gwt小部件的單擊事件
- 29. UAP Flyout塊和處理其他事件
- 30. 在Lwuit中,如何處理鍵盤導航事件?
請記住,所有其他的處理程序返回TRUE,以及幫助。 – user877329