Evgenii Legotckoi
30 августа 2015 г. 20:33

Qt/C++ - Урок 012. QShortcut или Горячие клавиши в Qt

Даже в официальной документации на тему QShortcut написано не так много, поэтому это скорее заметка, чтобы не забыть, а не полноценная статья. Всего лишь несколько слов о том, как подключить объект QShortcut, который будет отвечать за обработку нажатия горячей клавиши или сочетания горячих клавиш, например Ctrl + D .

Программный код был написан в QtCreator 3.3.1 на основе Qt 5.4.1.

Структура проекта для QShortcut

Структура проекта настолько тривиальна, что я даже не буду приводить её в данной заметке. Ограничусь лишь теми словами, что мы будем работать с двумя файлами:

  • mainwindow.h
  • mainwindow.cpp

А файл mainwindow.ui даже трогать в этом проекте не будем. Как он будет создан по умолчанию, так его и оставим.


mainwindow.h

В заголовочном файле потребуется объявить два объекта QShortcut , а также методы для обработки нажатий горячих клавиш.

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3.  
  4. #include <QMainWindow>
  5. #include <QShortcut>
  6. #include <QMessageBox>
  7.  
  8. namespace Ui {
  9. class MainWindow;
  10. }
  11.  
  12. class MainWindow : public QMainWindow
  13. {
  14. Q_OBJECT
  15.  
  16. public:
  17. explicit MainWindow(QWidget *parent = 0);
  18. ~MainWindow();
  19.  
  20. private slots:
  21. // слоты для обработки нажатий горячих клавиш
  22. void slotShortcutF11();
  23. void slotShortcutCtrlD();
  24.  
  25. private:
  26. Ui::MainWindow *ui;
  27. QShortcut *keyF11; // объект горячей клавиши F11
  28. QShortcut *keyCtrlD; // объект сочетания клавиш Ctrl + D
  29. };
  30.  
  31. #endif // MAINWINDOW_H

mainwindow.cpp

Минимальная настройка горячей клавиши заключается:

  • в инициализации объекта, который будет отвечать за горячую клавишу или сочетание горячих клавиш;
  • передаче кодов горячих клавиш в объект;
  • подключении СЛОТа-обработчика нажатий горячих клавиш к объекту QShortcut .
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3.  
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9.  
  10. keyF11 = new QShortcut(this); // Инициализируем объект
  11. keyF11->setKey(Qt::Key_F11); // Устанавливаем код клавиши
  12. // цепляем обработчик нажатия клавиши
  13. connect(keyF11, SIGNAL(activated()), this, SLOT(slotShortcutF11()));
  14.  
  15. keyCtrlD = new QShortcut(this); // Инициализируем объект
  16. keyCtrlD->setKey(Qt::CTRL + Qt::Key_D); // Устанавливаем сочетание клавиш
  17. // подключаем обработчик нажатия клавиши
  18. connect(keyCtrlD, SIGNAL(activated()), this, SLOT(slotShortcutCtrlD()));
  19. }
  20.  
  21. MainWindow::~MainWindow()
  22. {
  23. delete ui;
  24. }
  25.  
  26. /* Слот для обработки нажатия клавиши F11
  27. * */
  28. void MainWindow::slotShortcutF11()
  29. {
  30. /* В этом обработчике сделаем переключение приложения
  31. * в полноэкранный режим и обратно в нормальный режим окна
  32. * */
  33. if(this->isFullScreen()){
  34. this->showNormal();
  35. } else {
  36. this->showFullScreen();
  37. }
  38. }
  39.  
  40. /* Слот для обработки сочетания клавиш Ctrl + D
  41. * */
  42. void MainWindow::slotShortcutCtrlD()
  43. {
  44. /* Для обработки сочетания клавив Ctrl + D
  45. * сделаем информационный MessageBox,
  46. * который будет сигнализировать о том, что было нажато данное
  47. * сочетание клавиш
  48. * */
  49. QMessageBox::information(this,
  50. "Горячая клавиша",
  51. "Мои поздравления!!! Горячая клавиша работает",
  52. QMessageBox::Ok);
  53. }

Итог

В данном примере показан один из способов задания сочетания горячих клавиш, тогда как официальная документация приводит примеры нескольких способов:

  1. setKey(0); // сигнал не вызывается
  2. setKey(QKeySequence()); // сигнал не вызывается
  3. setKey(0x3b1); // Указание кода клавиши
  4. setKey(Qt::Key_D); // 'd', указание кода клавиши через директиву define
  5. setKey('q'); // 'q', указание кода клавиши через символ
  6. setKey(Qt::CTRL + Qt::Key_P); // Ctrl+P, указание сочетания клавиш через директивы define
  7. setKey("Ctrl+P"); // Ctrl+P, прямое написание сочетания клавиш
  8.  
  9. /* Сочетания клавиш необходимо прописывать через знак "+" */

В результате у Вас должно получиться приложение, которое по нажатию клавиши F11 разворачивается в полноэкранный режим и сворачивается обратно в нормальное отображение окна, а также по нажатию сочетания клавиш Ctrl + D вызывает MessageBox , который сигнализирует о нажатии этого сочетания клавиш.

Приложение с применением QShortcut

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь