web-dev-qa-db-fra.com

Attribuer des touches de raccourci aux boutons - Qt C++

J'ai créé une interface graphique à l'aide de Qt Creator. C'est par glisser-déposer les widgets. Maintenant, je veux assigner des touches de raccourci pour tous les boutons. Quelqu'un peut-il ici s'il vous plaît laissez-moi savoir comment faire cela? Merci d'avance.

20
Allwyn

Vos boutons ont probablement un emplacement connecté à leur signal clicked().

Pour ajouter des touches de raccourci, il vous suffit de connecter le signal activated() d'une touche de raccourci au même emplacement.

Dans votre code, #include <QShortcut> et vous pourrez ensuite ajouter une touche de raccourci pour un emplacement comme celui-ci:

QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+O"), parent);
QObject::connect(shortcut, SIGNAL(activated()), receiver, SLOT(yourSlotHere()));

Où parent est le parent de votre raccourci (par exemple, la fenêtre principale), yourSlotHere() est le nom du logement que le raccourci doit appeler, et receiver l'objet où yourSlotHere() est.

Remplacez "Ctrl+O" par le raccourci que vous souhaitez attribuer.

Vous pouvez également trouver plus d’informations sur la page de documentation de QShortcut .

42
houbysoft

Alternativement, si la touche de raccourci correspond à un caractère dans le texte du bouton, vous pouvez le préparer à l’avance. Si vous voulez un & littéral, utilisez &&.

14
Pavel Bazant

Aujourd'hui (Qt5.7), nous pouvons attribuer des raccourcis directement dans Qt Designer à l'aide de la propriété raccourci:

 enter image description here

Plutôt pratique .. Même si c'est un peu buggé: je dois "valider" le raccourci en cliquant sur une autre propriété du même widget avant de passer à un autre widget!

Mais ça marche.

3
Plouff

D'un bon point de vue UI/UX, ce que vous voulez réellement, ce n'est pas simplement de déclencher le même emplacement que le déclencheur de bouton (ce qui est la solution suggérée par la réponse acceptée), mais vous souhaitez également animer visuellement le bouton sur lequel vous appuyez pour créer Assurez-vous que l’utilisateur peut clairement constater l’action déclenchée. Ce qui suit est ce que j’utilise par exemple pour mon 'confirmer' QPushButtons.

// I have this function in my 'utils' module.
void bindShortcut(QAbstractButton *button, const QKeySequence &shortcut)  
{
    QObject::connect(new QShortcut(shortcut, button), &QShortcut::activated, [button](){ button->animateClick(); });
}

// and then I use it like this
auto *confirmButton = new QPushButton(tr("Confirm"));
connect(confirmButton, &QPushButton::clicked, ... some slot of yours to do the actual work);
bindShortcut(confirmButton, Qt::Key_Enter);
bindShortcut(confirmButton, Qt::Key_Return);

C’est la meilleure réponse, à mon avis, si vous n’utilisez pas QtDesigner. Sinon, vous pouvez facilement définir les raccourcis dans le concepteur, comme le suggère une autre réponse.

0
V.K.