2015-05-02 4 views
1

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

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

+0

В чем проблема с QKeySequence, поддерживающей четыре клавиши? Вы не обязаны определять четыре ключевых ярлыка, не так ли? Просто используйте их с двумя клавишами. –

+0

@FrankOsterfeld Нет, я не, но это UX nogo, чтобы показать пользователю четыре клавиши и использовать только один ... –

+0

Где такие ярлыки отображаются в пользовательском интерфейсе, если вы их не определяете? –

ответ

3

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

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

} 
+0

Большое спасибо. Я просто использую toString(). Split (",") .first() в "измененном" событии. Я не мог добавить пользовательский элемент в конструктор :( – Kursion

2

Вы можете использовать [] оператор 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); 
} 

Doing что, вы в полной мере уважать API и не зависят от персонажа ,, что весьма рискованно.