Comment définir un raccourci de séquence à 3 touches avec deux modificateurs de touches dans Qt?
J'ai essayé de définir un raccourci comme Ctrl+ Shift+ C.
J'ai essayé les méthodes suivantes:
QAction *generalControlAction = new QAction(this);
generalControlAction->setShortcut(QKeySequence("Ctrl+Shift+c"));
connect(generalControlAction, &QAction::triggered, this, &iBexWorkstation::onGeneralConfiguration);
QShortcut *generalControlShortcut = new QShortcut(QKeySequence("Ctrl+Shift+C"), this);
connect(generalControlShortcut, &QShortcut::activated, this, &iBexWorkstation::onGeneralConfiguration);
Ils n'ont pas fonctionné. Rien ne se déclenche lorsque j'appuie sur Ctrl+ Shift+ C.
Est-il impossible de définir un raccourci avec deux modificateurs dans Qt?
J'ai écrit un échantillon minimal et complet. Cela a fonctionné dans mon cas comme vous l'avez décrit. Peut-être, j'ai ajouté quelque chose que vous n'avez pas de votre côté. (C'est pourquoi il est préférable d'utiliser des "échantillons minimaux, complets et vérifiables".)
// standard C++ header:
#include <iostream>
// Qt header:
#include <QAction>
#include <QApplication>
#include <QLabel>
#include <QMainWindow>
using namespace std;
int main(int argc, char **argv)
{
cout << QT_VERSION_STR << endl;
// main application
#undef qApp // undef macro qApp out of the way
QApplication qApp(argc, argv);
// the short cut
const char *shortCut = "Ctrl+Shift+Q";
// setup GUI
QMainWindow qWin;
QAction qCmdCtrlShiftQ(&qWin);
qCmdCtrlShiftQ.setShortcut(QKeySequence(shortCut));
qWin.addAction(&qCmdCtrlShiftQ); // DON'T FORGET THIS.
QLabel qLbl(
QString::fromLatin1("Please, press ")
+ QString::fromLatin1(shortCut));
qLbl.setAlignment(Qt::AlignCenter);
qWin.setCentralWidget(&qLbl);
qWin.show();
// add signal handlers
QObject::connect(&qCmdCtrlShiftQ, &QAction::triggered,
[&qLbl, shortCut](bool) {
qLbl.setText(
QString::fromLatin1(shortCut)
+ QString::fromLatin1(" pressed."));
});
// run application
return qApp.exec();
}
Je soupçonne que vous n'avez pas appelé QWidget::addAction()
. Si je le commente, cela ne fonctionne plus dans mon programme également.
Compilé avec VS2013 et Qt 5.6 sous Windows 10 (64 bits):
Cet instantané a été réalisé après avoir appuyé sur Ctrl + Maj + Q.
Remarque:
J'ai réalisé par la suite que la vraie question portait sur "Ctrl + Shift + C". Pour être sûr, je l'ai vérifié. L'exemple de code ci-dessus fonctionne également avec "Ctrl + Maj + C".