2009-05-28 6 views
2

Je tente de réimplémenter le comportement de copie pour un objet QTextEdit. Le menu contextuel personnalisé que je crée fonctionne comme prévu lorsque le bouton 'Copier' est cliqué, mais Ctrl + C n'est pas géré correctement. Puisque le menu contextuel n'a aucun problème, je vais omettre cette partie du code.Comment redéfinir le comportement d'un raccourci clavier intégré?

// 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); 

Lorsque je configurer le raccourci pour être utilisé une combinaison de touches (par exemple, Ctrl + Q) il fonctionne très bien. Il semble Ctrl + C est traité différemment car il est "intégré".

Répondre

2

La copie n'est pas virtuelle, cela peut poser problème. La copie est gérée via l'API de contrôle de texte privé et n'est pas facilement accessible. La meilleure approche est probablement d'installer un gestionnaire d'événements pour l'édition de texte et d'intercepter l'événement de clé de copie avant qu'il ne soit remis au gestionnaire de contrôle de texte processEvent - ce qui devrait permettre à votre propre action de se déclencher correctement.

0

Il peut être plus simple de dériver de QTextEdit et de réimplémenter QTextEdit::copy(), selon le nouveau comportement.

-2

Je vous recommande de créer un filtre d'événements et de l'installer sur le widget de base (ou même l'instance QApplication). Vous pouvez utiliser le filtre d'événement pour observer les événements clés et, espérons-le, voir l'événement Ctrl + C avant qu'il ne soit traité ailleurs.

Lorsque vous rencontrez le Ctrl +C événement que vous souhaitez gérer, assurez-vous d'accepter cet événement pour l'empêcher d'être plus loin propagé.

+0

Juste ce que j'ai dit - sauf que vous avez réellement besoin de "capturer" ou il sera livré à la commande de texte et manipulé comme une copie normale –

Questions connexes