Q操作快捷方式并不总是有效的
QAction shortcut doesnt always work
我在一个菜单项上有一个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);
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 欧拉项目#8答案是大以获得有效答案
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- 如何有效地操作满足给定谓词的向量中的所有项目?
- 如何有效地使用 std::async 对指针数组执行操作
- 狂想曲C++状态图 - 事件(似乎有效)与触发操作(似乎什么都不做)
- LoadLibrary失败带有错误4250:此操作仅在应用程序容器的上下文中有效
- 需要帮助了解C 中有效的C弦操作
- 是否可以仅使用位操作有效地完成图像屏蔽
- 仅当对象处于特定状态时,操作才有效
- 将引用分配给引用是一个有效的操作
- Q操作快捷方式并不总是有效的
- 是否存在通过引用选择元素和通过指针操作选择元素都有效的情况
- 为什么检查分配操作的结果有效,但不能与其他条件相结合
- 在读/写操作中使用c++ 11 unordered_map的最有效方法
- 在内存中操作std::string的二维动态数组的最有效方法是什么?
- 需要在c++中有效操作内存的建议