Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 将键盘快捷键指定给QML组件_Qt_Qml_Qt Quick_Qt4.7_Qt5.1 - Fatal编程技术网

Qt 将键盘快捷键指定给QML组件

Qt 将键盘快捷键指定给QML组件,qt,qml,qt-quick,qt4.7,qt5.1,Qt,Qml,Qt Quick,Qt4.7,Qt5.1,我正在深入使用QML和Qt-Creator构建桌面应用程序,目前我正在研究键盘处理以及它如何与QML元素一起工作。我已经意识到桌面小部件缺少合适的QML替代品 我当前的问题是,我希望将一些全局键盘快捷键分配给某些特定的QML组件(例如将键盘快捷键分配给GUI上的按钮),这些组件应该会激活它们。我能做的最好的事情就是使用聚焦镜和键导航,通过键盘导航GUI,但这不是一回事 有人能建议在这种情况下该怎么做吗?Qt5有没有这样的功能?我在互联网上找不到任何关于此的信息。因此,假设您正在调用类似于此的按钮

我正在深入使用QML和Qt-Creator构建桌面应用程序,目前我正在研究键盘处理以及它如何与QML元素一起工作。我已经意识到桌面小部件缺少合适的QML替代品

我当前的问题是,我希望将一些全局键盘快捷键分配给某些特定的QML组件(例如将键盘快捷键分配给GUI上的按钮),这些组件应该会激活它们。我能做的最好的事情就是使用聚焦镜和键导航,通过键盘导航GUI,但这不是一回事


有人能建议在这种情况下该怎么做吗?Qt5有没有这样的功能?我在互联网上找不到任何关于此的信息。

因此,假设您正在调用类似于此的按钮单击事件的函数

Button {
  ...
  MouseArea {
    anchor.fill: parent
    onClicked: callThisFunction();
  }
}
然后可以用这种方式指定全局键盘快捷键。但是限制是全局QML元素(包含所有其他QML元素的父元素)应该具有焦点。例:

Rectangle {
  id: parentWindow
  ...
  ...
  Button {
    ...
    MouseArea {
      anchor.fill: parent
      onClicked: callThisFunction();
    }
  }
  Keys.onSelectPressed: callThisFunction()
}

这并不完全是您想要的,但可能会有所帮助。

回答我自己的问题,因为现在可以在Qt 5.1.1中实现快捷方式。 使用QML
操作
项,快捷键可以轻松绑定到
QtQuick
控件,如
按钮
工具按钮
菜单项
。e、 g:

ApplicationWindow {
    ...
    ToolButton { action: openAction } // Add a tool button in a ToolBar
    ...
    Action {
        id: openAction
        text: "&Open"
        shortcut: "Ctrl+O"
        onTriggered: // Do some action
        tooltip: "Open an image"
    }
}
按Ctrl+O将执行onTriggered部分中指定的操作


请参阅

通过使用C++(Qt)中的EventFilter,您完全可以在QML中使用快捷方式

您可以通过以下步骤进行操作:

1. Create a Shortcut class by C++.
2. Register QML Type for Shortcut class
3. Import Shortcut to QML file and handle it.
\ifndef快捷方式\u H
#定义快捷方式
#包括
类快捷方式:公共QObject
{
Q_对象
Q_属性(QVariant key READ key WRITE setKey NOTIFY keyChanged)
公众:
显式快捷方式(QObject*parent=0);
无效设置键(QVariant键);
QVariant key(){return m_keySequence;}
bool事件过滤器(QObject*obj,QEvent*e);
信号:
void keyChanged();
无效激活();
void pressed和hold();
公众时段:
私人:
QKeySequence m_keySequence;
布尔m_键按ReadySend;
};

#endif//SHORTCUT_H
从Qt 5.9开始,期望的行为是偶数:


如果省略上下文,它将仅适用于当前活动的窗口,否则对于整个应用程序,请参阅。

尝试此QShortcut QShortcut可用于基于QWidget的类。没有直接的方法使本机QML元素响应全局捷径。例如,可以将密钥分配给QML按钮,但它仅在按钮具有焦点时才起作用。同样的道理也很有趣。我在主GUI屏幕上使用QDeclarativeView(基于QWidget),其中嵌入了QML,因此应用程序范围的快捷方式现在很简单。
import QtQuick 2.9

Item {
    Shortcut {
       context: Qt.ApplicationShortcut
       sequences: [StandardKey.Close, "Ctrl+W"]

        onActivated: {
            container.clicked()
            console.log("JS: Shortcut activated.")
        }
    }
}