Qt 如何从QML使用QKeySequence或QKeySequenceEdit?

Qt 如何从QML使用QKeySequence或QKeySequenceEdit?,qt,qml,Qt,Qml,可以在QML中使用QKeySequence或QKeySequenceEdit吗?我只看到C++的文件 提供上下文,我希望QCKEY序列由应用程序的用户输入,这样我就可以将它传递给我的C++后端,这样我就可以钩住本地OS API,也可以将它序列化到文件。 我不想在Qt中实际建立快捷方式。您可以从快捷方式中为序列属性设置一个字符串,请参阅 例如,如果要链接Ctrl+M和Ctrl+T,请指定以下内容: Shortcut { sequence: "cltr+m,ctrl+t"

可以在QML中使用QKeySequence或QKeySequenceEdit吗?我只看到C++的文件

提供上下文,我希望QCKEY序列由应用程序的用户输入,这样我就可以将它传递给我的C++后端,这样我就可以钩住本地OS API,也可以将它序列化到文件。


我不想在Qt中实际建立快捷方式。

您可以从
快捷方式
中为
序列
属性设置一个字符串,请参阅

例如,如果要链接Ctrl+M和Ctrl+T,请指定以下内容:

Shortcut {
    sequence: "cltr+m,ctrl+t"
    onActivated: console.log("you activated turbo mode")
}

甚至可以使用
sequences
(复数)属性为同一个操作分配多个键盘快捷键:

我创建了一个新对象,它包装了
QKeySequence::toString
,并使它从QML中可用,这样我就不必在QML中重新实现大规模的开关

#ifndef QMLUTIL_H
#define QMLUTIL_H

#include <QObject>
#include <QKeySequence>

// A singleton object to implement C++ functions that can be called from QML
class QmlUtil : public QObject{
   Q_OBJECT
public:
    Q_INVOKABLE bool isKeyUnknown(const int key) {
        // weird key codes that appear when modifiers
        // are pressed without accompanying standard keys
        constexpr int NO_KEY_LOW = 16777248;
        constexpr int NO_KEY_HIGH = 16777251;
        if (NO_KEY_LOW <= key && key <= NO_KEY_HIGH) {
           return true;
        }

        if (key == Qt::Key_unknown) {
            return true;
        }

        return false;
    }
    Q_INVOKABLE QString keyToString(const int key, const int modifiers){
        if (!isKeyUnknown(key)) {
            return QKeySequence(key | modifiers).toString();
        } else {
            // Change to "Ctrl+[garbage]" to "Ctrl+_"
            QString modifierOnlyString = QKeySequence(Qt::Key_Underscore | modifiers).toString();

            // Change "Ctrl+_" to "Ctrl+..."
            modifierOnlyString.replace("_", "...");
            return modifierOnlyString;
        }
    }
};
\ifndef qmultil\H
#定义qmultil_H
#包括
#包括
//实现单函数对象的C++函数,可以从QML调用
类qmultil:公共QObject{
Q_对象
公众:
Q_可调用bool iskeynknown(const int key){
//当修改器
//在没有附带标准键的情况下按下
constexpr int NO_KEY_LOW=16777248;
constexpr int NO_KEY_HIGH=16777251;

如果(不,我明白了。嗯,我想我开始理解你了。你想要类似的东西,但在QML@eyllanesc是的,这看起来正是我想要的!或者,如果它不存在,一个简单的方法来重新实现它?我发现这个答案,这看起来不令人满意。OP花费了大量的代码将关键代码转换为ascii符号,这已经是挨QKeySequence@Mark我建议您指出,您希望实现一个具有类似QKeySequenceEdit行为的项,如果我不想将序列绑定到实际的快捷方式,该怎么办?我希望用户指定一个可以传递到后端的keysequence,因为我需要实现一些特定于操作系统的行为(即使应用程序未聚焦,也应触发快捷方式)我还想从纯文本配置保存并加载此快捷方式file@eyllanesc后端已配置为调用正确的系统库。剩下的是能够从QML更改快捷方式,然后使后端和前端根据快捷方式进行同步。@Eylandesc正是如此。因此,我们的想法是捕获一个k然后调用后端函数SetOSHotkey(userkeysequence)。这是否澄清了问题?