Тіпті QShortcut бойынша ресми құжаттама да көп нәрсені айтпайды, сондықтан толық мақаладан гөрі есте сақтау керек. Жылдам пернені басу немесе Ctrl + D сияқты жылдам пернелер тіркесімін өңдеуге жауап беретін QShortcut нысанын қосу жолы туралы бірнеше сөз.
Код Qt 5.4.1 негізінде QtCreator 3.3.1-де жазылған.
QShortcut үшін жоба құрылымы
Жоба құрылымы соншалықты тривиальды, мен оны бұл жазбаға қоспаймын. Мен екі файлмен жұмыс істейтін сөздермен ғана шектелемін:
- main window.h
- mainwindow.cpp
Және бұл жобадағы mainwindow.ui файлына да қол тигізбейміз. Ол әдепкі бойынша жасалатындықтан, біз оны қалдырамыз.
mainwindow.h
Тақырып файлында екі QShortcut нысанын, сонымен қатар жылдам пернелерді өңдеу әдістерін жариялау қажет.
#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
Ең төменгі жылдам перне параметрі:
- жылдам пернеге немесе жылдам пернелер тіркесіміне жауап беретін нысанды инициализациялауда;
- объектіге жылдам пернелер кодтарын беру;
- жылдам пернелердің SLOT өңдеушісін QShortcut нысанына қосу.
#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); }
Барлығы
Бұл мысал пернелер тіркесімін орнатудың бір жолын көрсетеді, ал ресми құжаттамада бірнеше жолдың мысалдары келтірілген:
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, прямое написание сочетания клавиш /* Сочетания клавиш необходимо прописывать через знак "+" */
Нәтижесінде сізде F11 пернесін басқан кезде толық экран режиміне дейін кеңейетін және қалыпты терезе дисплейіне қайтаратын қолданба болуы керек, сонымен қатар Ctrl + D пернелер тіркесімін басқанда, MessageBox шақырады, бұл пернелер тіркесімі басылғанын білдіреді.
QShortcut көмегімен қолданба