Auch die offizielle Dokumentation zum Thema QShortcut ist nicht viel geschrieben, daher ist dies eher ein Hinweis zum Nicht-Vergessen, als ein vollwertiger Artikel. Nur ein paar Worte zum Verbinden eines QShortcut Objekts, das für die Handhabung eines Hotkeys oder einer Hotkey-Kombination verantwortlich ist, zum Beispiel Strg + D .
Der Programmcode wurde in QtCreator 3.3.1 basierend auf Qt 5.4.1 geschrieben.
Projektstruktur für QShortcut
Die Struktur des Projekts ist so trivial, dass ich sie in diesem Artikel nicht einmal angeben werde. Ich beschränke mich nur auf die Worte, mit denen wir mit zwei Dateien arbeiten werden:
- mainwindow.h
- mainwindow.cpp
Und wir werden in diesem Projekt nicht einmal die Datei mainwindow.ui berühren. Da es standardmäßig erstellt wird, belassen wir es.
mainwindow.h
In der Header-Datei müssen Sie zwei QShortcut -Objekte sowie Methoden für die Handhabung von Tastenkombinationen deklarieren.
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QShortcut> #include <QMessageBox> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: // слоты для обработки нажатий горячих клавиш void slotShortcutF11(); void slotShortcutCtrlD(); private: Ui::MainWindow *ui; QShortcut *keyF11; // объект горячей клавиши F11 QShortcut *keyCtrlD; // объект сочетания клавиш Ctrl + D }; #endif // MAINWINDOW_H
mainwindow.cpp
Das minimale Hotkey-Setup ist:
- bei der Initialisierung eines Objekts, das für einen Hotkey oder eine Kombination von Hotkeys verantwortlich ist;
- Übertragung von Codes von Hotkeys an das Objekt;
- Verbinden des SLOT-Handlers zum Drücken von Hotkeys mit dem QShortcut Objekt.
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); keyF11 = new QShortcut(this); // Инициализируем объект keyF11->setKey(Qt::Key_F11); // Устанавливаем код клавиши // цепляем обработчик нажатия клавиши connect(keyF11, SIGNAL(activated()), this, SLOT(slotShortcutF11())); keyCtrlD = new QShortcut(this); // Инициализируем объект keyCtrlD->setKey(Qt::CTRL + Qt::Key_D); // Устанавливаем сочетание клавиш // подключаем обработчик нажатия клавиши connect(keyCtrlD, SIGNAL(activated()), this, SLOT(slotShortcutCtrlD())); } MainWindow::~MainWindow() { delete ui; } /* Слот для обработки нажатия клавиши F11 * */ void MainWindow::slotShortcutF11() { /* В этом обработчике сделаем переключение приложения * в полноэкранный режим и обратно в нормальный режим окна * */ if(this->isFullScreen()){ this->showNormal(); } else { this->showFullScreen(); } } /* Слот для обработки сочетания клавиш Ctrl + D * */ void MainWindow::slotShortcutCtrlD() { /* Для обработки сочетания клавив Ctrl + D * сделаем информационный MessageBox, * который будет сигнализировать о том, что было нажато данное * сочетание клавиш * */ QMessageBox::information(this, "Горячая клавиша", "Мои поздравления!!! Горячая клавиша работает", QMessageBox::Ok); }
Ergebnis
Dieses Beispiel zeigt eine der Möglichkeiten zum Festlegen einer Tastenkombination, während die offizielle Dokumentation Beispiele für mehrere Möglichkeiten enthält:
setKey(0); // сигнал не вызывается setKey(QKeySequence()); // сигнал не вызывается setKey(0x3b1); // Указание кода клавиши setKey(Qt::Key_D); // 'd', указание кода клавиши через директиву define setKey('q'); // 'q', указание кода клавиши через символ setKey(Qt::CTRL + Qt::Key_P); // Ctrl+P, указание сочетания клавиш через директивы define setKey("Ctrl+P"); // Ctrl+P, прямое написание сочетания клавиш /* Сочетания клавиш необходимо прописывать через знак "+" */
Als Ergebnis sollten Sie eine Anwendung haben, die durch Drücken der Taste F11 in den Vollbildmodus erweitert und wieder auf die normale Fensteranzeige reduziert wird, sowie durch Drücken der Taste Strg + D ruft MessageBox auf, was signalisiert, dass diese Tastenkombination gedrückt wird.
Anwendung mit QShortcut