Ограничить QKeySequence / QKeySequenceEdit только одним ярлыком

Можно ли ограничить QKeySequence показать только один ярлык в QKeySequenceEdit? В настоящее время он поддерживает до 4 ярлыков. Мое приложение поддерживает последовательности клавиш только одного ярлыка, например, Ctrl+A или же Ctrl+C а не например Ctrl+A, D или же Ctrl+C, X, Z,

Можно ли ограничить QKeySequence или же QKeySequenceEdit только к одной последовательности клавиш?

1

Решение

Решил это, не лучшее решение, но быстрое … Если вы хотите что-то более индивидуальное, я думаю, вы должны построить это самостоятельно …

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

}
3

Другие решения

Вы можете использовать [] оператор 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 и не зависите от , персонаж, который довольно рискованно.

2

По вопросам рекламы [email protected]