Q操作快捷方式并不总是有效的

QAction shortcut doesnt always work

本文关键字:有效 操作 快捷方式      更新时间:2023-10-16

我在一个菜单项上有一个Qaction,用于删除其中一个视图中的选定项目。以下是我如何创建操作:

deleteAct = new QAction( tr("Delete Selected"), this);
deleteAct->setShortcut(QKeySequence::Delete);
connect(deleteAct, SIGNAL(triggered()), this, SLOT(deleteSelected()));  

我设置了一个键盘快捷键(Delete Key),它应该触发delectAct操作。它大部分时间都有效,但有时会停止工作。。。有人知道为什么快捷方式会停止工作吗?

注意:如果我从菜单项触发该操作,该操作仍然有效。这只是一条不。。。

您需要将操作添加到小部件中,因为它是将侦听关键事件的小部件。假设"这"是一个主窗口,只需执行

addAction(deleteAct);

请注意,您可以向多个小部件添加相同的操作(这就是分离操作概念的全部意义)。因此,可以将其添加到主窗口和菜单中。

尝试更改操作的快捷方式上下文,例如:

deleteAct->setShortcutContext(Qt::ApplicationShortcut);

快捷方式的工作方式取决于应用程序视图的焦点
我想在按钮上使用快捷方式
在我的应用程序中,我更改了操作的快捷方式上下文,
将操作添加到小部件
最后是应用程序的子视图
然后必须连接小部件动作的必要信号和插槽。

const QAbstractButton*button  = dynamic_cast<QAbstractButton*>(widget);
action->setShortcutContext(Qt::WidgetWithChildrenShortcut);
widget->addAction(action);
ui->textBrowser->addAction(action);
ui->treeSource->addAction(action);
if (button)
{
    if (button->isCheckable())
    {
        action->setCheckable(true);
        if (button->isChecked()) action->setChecked(true);
        connect(action, SIGNAL(triggered(bool)), button, SLOT(setChecked(bool)));
        connect(button, SIGNAL(clicked(bool)), action, SLOT(setChecked(bool)));
    }
    else
    {
        connect(action, SIGNAL(triggered()), button, SLOT(click()));
    }
}

如果没有看到完整的代码,我会冒险猜测它在某个地方被启用/禁用。请确保快捷方式在构造函数中被命中,而不是因为某个设置而在其他地方被"禁用"。

您可以使用http://doc.qt.io/qt-5/qaction.html#shortcutVisibleInContextMenu-自QT 5.10以来的属性:

deleteAct->setShortcutVisibleInContextMenu(true);