首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QKeySequence/QKeySequenceEdit限制为一个快捷方式

将QKeySequence/QKeySequenceEdit限制为一个快捷方式
EN

Stack Overflow用户
提问于 2015-05-02 19:29:15
回答 4查看 1.8K关注 0票数 3

是否可以限制QKeySequenceQKeySequenceEdit中只显示一个快捷方式?目前,它支持多达4个快捷方式。我的应用程序只支持一个快捷方式的关键序列,例如Ctrl+ACtrl+C,而不是Ctrl+A, DCtrl+C, X, Z

是否可以将QKeySequenceQKeySequenceEdit限制为一个键序列?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-02 21:29:59

解决它,不是最好的解决方案,但quick...If你想要更定制的东西,我认为你必须自己建立它.

customkeysequenceedit.h

代码语言:javascript
复制
#ifndef CUSTOMKEYSEQUENCEEDIT_H
#define CUSTOMKEYSEQUENCEEDIT_H

#include <QKeySequenceEdit>

class QKeyEvent;

class CustomKeySequenceEdit : public QKeySequenceEdit
{
    Q_OBJECT

public:
    explicit CustomKeySequenceEdit(QWidget *parent = 0);
    ~CustomKeySequenceEdit();

protected:
    void keyPressEvent(QKeyEvent *pEvent);
};

#endif // CUSTOMKEYSEQUENCEEDIT_H

customkeysequenceedit.cpp

代码语言:javascript
复制
#include "customkeysequenceedit.h"

#include <QKeyEvent>

CustomKeySequenceEdit::CustomKeySequenceEdit(QWidget *parent) : QKeySequenceEdit(parent) { }

CustomKeySequenceEdit::~CustomKeySequenceEdit() { }

void CustomKeySequenceEdit::keyPressEvent(QKeyEvent *pEvent)
{
    QKeySequenceEdit::keyPressEvent(pEvent);

    QKeySequence seq(QKeySequence::fromString(keySequence().toString().split(", ").first()));
    setKeySequence(seq);

}
票数 5
EN

Stack Overflow用户

发布于 2016-07-17 18:17:22

您可以使用[]操作符QKeySequencehttp://doc.qt.io/qt-5/qkeysequence.html#operator-5b-5d

因此,在您的接口构造函数中,编写如下:

代码语言:javascript
复制
connect(ui->editShortcut, &QKeySequenceEdit::editingFinished, 
        this, &dialog::truncateShortcut);

并将此私有方法添加到您的对话框类中:

代码语言:javascript
复制
void dialog::truncateShortcut()
{
    int value = ui->editShortcut->keySequence()[0];
    QKeySequence shortcut(value);
    ui->editShortcut->setKeySequence(shortcut);
}

这样做,您完全尊重API,并且不依赖于,字符,这是相当危险的。

票数 5
EN

Stack Overflow用户

发布于 2022-10-19 03:42:24

大多数答案是在输入完成后截断快捷方式。无论如何,将在输入的进程中显示多个短切,这有点烦人。

我找到了一个解决方案,甚至不会显示一个以上的短切。

输入一个快捷方式后,通过清晰焦点完成输入,通过setKeySequence重写 QKeySequenceEditkeyPressEvent函数。

--而且,这种方法很简单,很优雅!

首先从myKeySequenceEdit创建一个类QKeySequenceEdit,下面是代码:

mykeysequenceedit.h

代码语言:javascript
复制
#ifndef MYKEYSEQUENCEEDIT_H
#define MYKEYSEQUENCEEDIT_H

#include <QKeySequenceEdit>
#include <QWidget>

class myKeySequenceEdit : public QKeySequenceEdit
{
    Q_OBJECT
public:
    myKeySequenceEdit(QWidget *parent = nullptr);

    void keyPressEvent(QKeyEvent *) override;
};

#endif // MYKEYSEQUENCEEDIT_H

mykeysequenceedit.cpp

代码语言:javascript
复制
#include "mykeysequenceedit.h"

myKeySequenceEdit::myKeySequenceEdit(QWidget *parent) : QKeySequenceEdit(parent) {}

void myKeySequenceEdit::keyPressEvent(QKeyEvent *event)
{
    QKeySequenceEdit::keyPressEvent(event);
    if (this->keySequence().count() > 0) {
        QKeySequenceEdit::setKeySequence(this->keySequence());
        
        emit editingFinished(); // Optinal, depend on if you need the editingFinished signal to be triggered
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30006562

复制
相关文章

相似问题

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