(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 there is already a key sequence, and if it has been validly defined,
// clear it to enter a new one
if (!this->keySequence().isEmpty() && (this->nativeVirtualKey != 0)) {
this->clear();
}
// Forbid the Meta key
Qt::KeyboardModifiers modifiers = keyEvent->modifiers();
if (modifiers & Qt::META) {
return true;
}
// Save the modifiers
if (modifiers & Qt::CTRL) {
this->nativeModifiers += MOD_CONTROL;
}
if (modifiers & Qt::ALT) {
this->nativeModifiers += MOD_ALT;
}
if (modifiers & Qt::SHIFT) {
this->nativeModifiers += MOD_SHIFT;
}
// Forbid a shortcut without any modifier
if (modifiers == 0) {
return true;
}
// Save the virtual key
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 !
