Comment définir un raccourci de séquence à 3 touches avec deux modificateurs de touches dans Qt?


Thon Onur

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?

Scheff

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

Instantané de testQShortCut.exe (après avoir appuyé sur Ctrl + Maj + Q)

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".

Articles connexes


Comment personnaliser les touches de raccourci FoxitReader

Trung Ta Récemment, FoxitReader pour Linux a été officiellement introduit et je l'adore. http://www.webupd8.org/2015/09/foxit-pdf-reader-sees-new-linux-release.html Cependant, FoxitReader ne prend pas en charge les touches de raccourci pour les outils de comme

Attraper la séquence de touches WinKey + D dans Winforms

altgov3en J'essaie de faire en sorte que mon application soit toujours présentée au niveau du bureau. Cela signifie que mon application doit ignorer les séquences de touches telles que LWin + D ou RWin + D. J'ai essayé de le faire fonctionner de cette façon: p

Raccourci de combinaison de touches

TestMan Je crée une application WPF et j'ai trois fenêtres ( MainWindow, SecondWindow and CameraWindow). J'ai ajouté un raccourci ("m")pour régler l'appareil photo en mode image. Cela fonctionne bien quand CameraWindowest actif. private void Window_KeyDown(obj

Comment utiliser deux touches de clavier simultanément dans sdl

bj J'écris un jeu simple en C avec SDL et j'ai défini que le joueur un contrôle son_par exemple_tank avec la touche fléchée du clavier et le joueur deux contrôle son tank avec les touches "W", "A", "S", "D" du clavier. Mon problème est qu'ils ne peuvent pas ap