首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用QML中的QKeySequence或QKeySequenceEdit?

如何使用QML中的QKeySequence或QKeySequenceEdit?
EN

Stack Overflow用户
提问于 2020-11-13 18:36:21
回答 1查看 504关注 0票数 0

在QML中可以使用QKeySequence或QKeySequenceEdit吗?我只看到了C++ https://doc.qt.io/qt-5/qkeysequence.html#details的文档

为了提供上下文,我希望应用程序的用户输入一个QKeySequence,这样我就可以将它传递给我的C++后端,这样我就可以连接到本地OS并将它序列化为文件。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-16 17:41:54

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

代码语言:javascript
复制
#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;
        }
    }
};

要在QML中公开这一点,必须在设置engine.rootContext()->setContextProperty("qmlUtil", new QmlUtil());main.cpp中使用QQmlEngine。

然后,您可以在QML中键入qmlUtil.keyToString(event.key, event.modifiers),将键盘事件转换为字符串。

您可以将其与这里的解决方案结合起来,https://stackoverflow.com/a/64839234/353407将个别情况替换为对qmlUtil.keyToString的单个函数调用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64826271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档