2009-05-28 2 views
2

QTextEdit 개체의 복사 동작을 다시 구현하려고합니다. 내가 작성한 사용자 정의 컨텍스트 메뉴는 '복사'버튼을 클릭했지만 Ctrl + C이 올바르게 처리되지 않을 때 예상대로 작동합니다. 컨텍스트 메뉴에는 아무런 문제가 없으므로 코드의 해당 부분을 생략합니다. I는 미사용 키 조합으로 가기를 설정하면내장 된 키보드 단축키의 동작을 재정의하려면 어떻게해야합니까?

// 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를 통해 처리되며 쉽게 액세스 할 수 없습니다. 가장 좋은 방법은 텍스트 편집을위한 이벤트 핸들러를 설치하고 text 컨트롤 processEvent 핸들러에 전달되기 전에 복사 키 이벤트를 인터셉트하는 것입니다. 그러면 텍스트 액션이 올바르게 트리거 될 수 있습니다.

0

새로운 동작에 따라 QTextEdit에서 파생되고 QTextEdit::copy()을 다시 구현하는 것이 더 간단 할 수 있습니다.

-2

이벤트 필터를 작성하여 기본 위젯 (또는 QApplication 인스턴스)에 설치하는 것이 좋습니다. 이벤트 필터를 사용하여 키 이벤트를보고 다른 곳에서 처리되기 전에 Ctrl + C 이벤트를 볼 수 있습니다. 당신이 처리 할 Ctrl 키 + C 이벤트가 발생하면

, 더 propogated되는 것을 방지하기 위해 해당 이벤트를 수락해야합니다.

+0

내가 말한 것 - 실제로 "캡처"해야하거나 텍스트 컨트롤에 전달되고 일반 복사본으로 처리된다는 점만 제외하면 –

관련 문제