如何重新定义内置键盘快捷键的行为?

时间:2009-05-28 00:41:38

标签: c++ qt keyboard-shortcuts

我正在尝试重新实现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 个答案:

答案 0 :(得分:2)

复制不是虚拟的,因此可能会出现问题。复制是通过私有文本控件API处理的,不容易访问。最好的方法可能是为文本编辑安装一个事件处理程序,并在将复制键事件传递给文本控制processEvent处理程序之前拦截它 - 这应该允许你自己的操作正确触发。

答案 1 :(得分:0)

QTextEdit派生并重新实现QTextEdit::copy()可能更简单,具体取决于新行为。

答案 2 :(得分:-2)

我建议创建一个事件过滤器并将其安装在基本窗口小部件(甚至是QApplication实例)上。您可以使用事件过滤器查看关键事件,并希望在其他地方处理之前看到Ctrl + C事件。

当您遇到要处理的 Ctrl + C 事件时,请务必接受该事件以防止它再被传播。