2009-05-28 91 views
2

我正在嘗試重新實現QTextEdit對象的複製行爲。單擊「複製」按鈕時,我創建的自定義上下文菜單按預期工作,但Ctrl + C未正確處理。由於上下文菜單沒有任何問題,因此我將忽略該部分代碼。如何重新定義內置鍵盤快捷鍵的行爲?

// Create a text edit box for text editing 
QTextEdit text_edit_box = new QTextEdit(getBaseWidget()); 

text_edit_copy_action = new QAction(QString("Copy"), getBaseWidget()); 
text_edit_copy_action->setShortcut(QKeySequence::Copy); 

// Add custom copy action to the text edit box to ensure Ctrl+C uses our copy 
// implementation 
text_edit_box->addAction(text_edit_copy_action); 

當我設置快捷是一個未用過的鍵組合(例如,Ctrl鍵 + Q)能正常工作。看起來好像是Ctrl + C由於是「內置」,所以處理方式不同。

回答

2

複製不是虛擬的,所以這可能是有問題的。複製通過私人文本控制API進行處理,並且不易訪問。最好的方法可能是爲文本編輯安裝一個事件處理程序,並在複製鍵事件傳遞給文本控件processEvent處理程序之前截取它 - 這應該允許您自己的操作正確觸發。

0

取決於新行爲是什麼,從QTextEdit和重新實現QTextEdit::copy()派生出來可能會更簡單。

-2

我會建議創建一個事件過濾器並在基礎小部件(甚至是QApplication實例)上安裝它。您可以使用事件過濾器查看關鍵事件,並希望在其他位置處理之前查看Ctrl + C事件。

當你遇到要處理按Ctrl +Ç事件,一定要接受該事件,以防止它將會傳播任何進一步。

+0

正是我所說的 - 除了你實際上需要「捕獲」它或它將被傳遞到文本控件並作爲正常副本來處理 – 2009-05-29 07:20:51