(Comment ça, pourtant Qt est libre !

)
Bon, je me suis encore cassé les dents sur cette fameuse méthode key(). Apparemment, elle retourne un mix de modifieurs en même temps que le code de touche, j'ai l'impression que je me suis approché de la vérité sans complètement décrypté

Donc plutôt qu'un bouton standard dans lequel je reconstituais le texte, j'ai dérivé la classe
QKeySequenceEdit qui s'occupe de la saisie de séquences de 4 touches (Emacs' style), chacune étant combinée éventuellement à des modifieurs.
J'intercepte les évènements claviers, j'en tire le code VirtualKey, et je reconstitue les modifieurs natifs.
Au passage, j'interdis la touche Windows et je limite la séquence à une seule combinaison de touche.
Mais surtout, je laisse le widget se démerder pour afficher ce que je tape. Et ça, c'est le pied :
HotkeyInputWidget
#include "HotkeyInputWidget.hpp"
#include <QKeyEvent>
#include <QKeySequence>
HotkeyInputWidget::HotkeyInputWidget()
: nativeModifiers(0)
, nativeVirtualKey(0)
{
this->installEventFilter(this);
}
HotkeyInputWidget::~HotkeyInputWidget()
{
}
bool HotkeyInputWidget::isValid() const
{
return this->nativeVirtualKey != 0;
}
bool HotkeyInputWidget::eventFilter(QObject* object, QEvent* event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
if (!this->keySequence().isEmpty() && (this->nativeVirtualKey != 0)) {
this->clear();
}
Qt::KeyboardModifiers modifiers = keyEvent->modifiers();
if (modifiers & Qt::META) {
return true;
}
if (modifiers & Qt::CTRL) {
this->nativeModifiers += MOD_CONTROL;
}
if (modifiers & Qt::ALT) {
this->nativeModifiers += MOD_ALT;
}
if (modifiers & Qt::SHIFT) {
this->nativeModifiers += MOD_SHIFT;
}
if (modifiers == 0) {
return true;
}
this->nativeVirtualKey = keyEvent->nativeVirtualKey();
}
return QObject::eventFilter(object, event);
}
J'ai donc ce que je veux, mais c'est dommage que je n'ai pas réussi à décrypter ce bordel de la classe QKeyEvent

Merci beaucoup pour votre aide en tout cas !
