是否可以限制QKeySequence在QKeySequenceEdit中只显示一个快捷方式?目前,它支持多达4个快捷方式。我的应用程序只支持一个快捷方式的关键序列,例如Ctrl+A或Ctrl+C,而不是Ctrl+A, D或Ctrl+C, X, Z。
是否可以将QKeySequence或QKeySequenceEdit限制为一个键序列?
发布于 2015-05-02 21:29:59
解决它,不是最好的解决方案,但quick...If你想要更定制的东西,我认为你必须自己建立它.
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_Hcustomkeysequenceedit.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);
}发布于 2016-07-17 18:17:22
您可以使用[]操作符QKeySequence:http://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,并且不依赖于,字符,这是相当危险的。
发布于 2022-10-19 03:42:24
大多数答案是在输入完成后截断快捷方式。无论如何,将在输入的进程中显示多个短切,这有点烦人。
我找到了一个解决方案,甚至不会显示一个以上的短切。
输入一个快捷方式后,通过清晰焦点完成输入,通过setKeySequence重写 QKeySequenceEdit类keyPressEvent函数。
--而且,这种方法很简单,很优雅!
首先从myKeySequenceEdit创建一个类QKeySequenceEdit,下面是代码:
mykeysequenceedit.h
#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_Hmykeysequenceedit.cpp
#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
}
}https://stackoverflow.com/questions/30006562
复制相似问题