Как я могу переопределить поведение встроенного сочетания клавиш? - PullRequest
2 голосов
/ 28 мая 2009

Я пытаюсь повторно реализовать поведение копирования для объекта 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 обрабатывается по-другому, поскольку он "встроен".

Ответы [ 3 ]

2 голосов
/ 28 мая 2009

Копирование не является виртуальным, поэтому это может быть проблематично. Копирование осуществляется через API-интерфейс управления частным текстом и не является легкодоступным. Лучше всего, вероятно, установить обработчик события для редактирования текста и перехватить событие ключа копирования до того, как оно будет доставлено в обработчик обработки текста processEvent, что должно позволить вашему собственному действию корректно запускаться.

0 голосов
/ 28 мая 2009

Я бы порекомендовал создать фильтр событий и установить его на базовый виджет (или даже на экземпляр QApplication). Вы можете использовать фильтр событий для просмотра ключевых событий и, надеюсь, увидеть событие Ctrl + C до его обработки в другом месте.

Когда вы сталкиваетесь с событием Ctrl + C , которое хотите обработать, обязательно примите это событие, чтобы предотвратить его дальнейшее распространение.

0 голосов
/ 28 мая 2009

Может быть проще извлечь из QTextEdit и переопределить QTextEdit::copy(), в зависимости от нового поведения.

...