1

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

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

4

2 回答 2

5

解决了它,不是最好的解决方案,但很快......如果你想要更多定制的东西,我认为你必须自己构建它......

customkeysequenceedit.h

#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

#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);

}
于 2015-05-02T21:29:59.123 回答
4

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

所以在你的接口构造函数中,这样写:

connect(ui->editShortcut, &QKeySequenceEdit::editingFinished, 
        this, &dialog::truncateShortcut);

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

void dialog::truncateShortcut()
{
    int value = ui->editShortcut->keySequence()[0];
    QKeySequence shortcut(value);
    ui->editShortcut->setKeySequence(shortcut);
}

这样做,你完全尊重 API 并且不依赖于,字符,这是非常冒险的。

于 2016-07-17T18:17:22.117 回答