将剪切、复制、粘贴快捷方式更改为 Qt 5 中的自定义插槽

Posted

技术标签:

【中文标题】将剪切、复制、粘贴快捷方式更改为 Qt 5 中的自定义插槽【英文标题】:Change the Cut, Copy, Paste shortcut to the custom slots in Qt 5 【发布时间】:2015-02-25 09:57:16 【问题描述】:

目前,我正在开发一个编辑器程序。我想为我的自定义函数分配三个快捷键(QKeySequence::Cut)、(QKeySequence::Copy)和(QKeySequence::Paste)。但是,它并没有达到我的预期。

为了测试,我从 QtCreator 打开“应用程序示例”。然后,我尝试禁用所有快捷键如下:

//cutAct->setShortcuts(QKeySequence::Cut);    
connect(cutAct, SIGNAL(triggered()), textEdit, SLOT(cut()));

copyAct = new QAction(QIcon(":/images/copy.png"), tr("&Copy"), this);
//copyAct->setShortcuts(QKeySequence::Copy);

connect(copyAct, SIGNAL(triggered()), textEdit, SLOT(copy()));

pasteAct = new QAction(QIcon(":/images/paste.png"), tr("&Paste"), this);
//pasteAct->setShortcuts(QKeySequence::Paste);

令人惊讶的是,快捷键仍然像以前一样工作。

另一个测试是:

    将所有操作连接到自定义插槽。 将所有按键序列分配给已连接到我的自定义插槽的操作。

那么,我的结果是

    单击工具栏上的剪切、复制、粘贴转到我的自定义插槽。 快捷键与我的自定义插槽独立工作。

欢迎任何建议。 非常感谢。

【问题讨论】:

您不会覆盖默认操作,您只需将自定义操作添加到默认行为中 顺便说一句,覆盖默认快捷方式不是一个好习惯 感谢您的回复。我想覆盖默认操作的原因是默认操作仅适用于文本,同时我想复制/粘贴文本和其他内容,如 html 元素。我在 qt-project.org/forums/viewthread/18189 和 qtcentre.org/threads/29988-Cannot-override-copy-shortcut 找到了一些东西。但是,我仍然想要解决这个问题。 那你为什么不连接插槽然后覆盖剪贴板内容呢? 我正在开发一个 Web 编辑器程序,因此我想做以下操作: - 如果选择了文本,则复制/粘贴快捷方式是正常的,因为它是默认实现的。 - 当我想为 html 标签制作复制/粘贴快捷方式时,问题就来了。例如:用户点击文本框,相当于 标签,将其选中。然后,我想使用 Ctrl+C 将整个 元素复制到剪贴板,然后转到另一个页面,“Ctrl+V”用于将该 附加到 html 源代码。因此,我想覆盖默认插槽,而不是剪贴板中的内容。 【参考方案1】:

感谢 Sigil 的代码,我找到了覆盖默认快捷方式的方法。

我使用以下代码:

在标题中声明一个新动作:

  QShortcut &m_Paste1;

那么,在类的构造函数中:

m_Paste1(*(new QShortcut(QKeySequence(QKeySequence::Paste), this, 0, 0, Qt::WidgetShortcut))),

最后,将其连接到您自己的插槽

connect(&m_Paste1, SIGNAL(activated()), this, SLOT(paste()));

【讨论】:

以上是关于将剪切、复制、粘贴快捷方式更改为 Qt 5 中的自定义插槽的主要内容,如果未能解决你的问题,请参考以下文章

Vim 多行剪切复制和删除

selenium中的对输入框文本进行全选,复制,粘贴,剪切和删除的操作

ps复制粘贴快捷键是啥

WKWebView 的自定义剪切、复制和粘贴操作

QT读取剪切板内容-实现复制粘贴文本和图片

QT读取剪切板内容-实现复制粘贴文本和图片