2009-05-28 9 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 +Cイベントが発生したとき

、任意の更なるpropogatedされるのを防ぐために、そのイベントを受け入れることを確認してください。

+0

あなたが実際にそれを「キャプチャ」する必要があることを除いて、またはテキストコントロールに配信され、通常のコピーとして処理される –

関連する問題