Evgenii Legotckoi
Evgenii Legotckoi28. Februar 2016 10:45

QGlobalShortcut - Globale Hotkeys

Während ich Probleme mit globalen Hotkeys für Linux und Windows untersuchte, schrieb ich mein Fahrrad für die schnelle Registrierung von Hotkeys. Die resultierende Bibliothek heißt QGlobalShortcut und ist auf GitHub unter LGPLv2-Lizenz verfügbar. Die Bibliothek unterstützt Windows - und Linux/Unix -Plattformen (die X11 verwenden).

Die Logik der von dieser Bibliothek bereitgestellten Klasse QGlobalShortcut, ähnelt der Logik der Klasse QShortcut, obwohl sie diese Klasse offensichtlich in einigen Parametern nicht erreicht, aber die Hauptsache ist, dass sie ihre Hauptfunktion erfüllt . Registrieren Sie nämlich den globalen HotKey und senden Sie ein Signal über seine Aktivierung.

Um die Bibliothek zu verwenden, müssen Sie derzeit die Header-Dateien und Quellcodedateien in Ihrem Projekt platzieren sowie zusätzliche Informationen zum Projektprofil hinzufügen.


Holen Sie sich die Bibliothek

QGlobalShortcut speichern

Projektaufbau

Die Bibliothek besteht je nach Plattform (Windows, X11) aus einer Header-Datei und zwei Quellcode-Dateien. Abgesehen von README etc.

Die Bibliothek verwendet den Sprachstandard C++11, daher ist es zwingend erforderlich, das Projekt nach diesem Standard oder höher zu konfigurieren. Für Linux/Unix müssen Sie das Modul x11extras verwenden, das höchstwahrscheinlich separat installiert werden muss, da Qt dieses Modul nicht standardmäßig ausliefert. Außerdem müssen Sie das Projekt konfigurieren, um Bibliotheken für die Arbeit mit XLib und XCB zu verwenden.

CONFIG += c++11

linux {
    QT       += x11extras
    CONFIG   += link_pkgconfig
    PKGCONFIG += x11
}

win32: SOURCES += win/qglobalshortcut.cpp
linux: SOURCES += x11/qglobalshortcut.cpp

HEADERS  += qglobalshortcut.h

Öffentliche Funktionen

QKeySequence-Verknüpfung ()

Die Methode gibt die festgelegte Hotkey-Kombinationssequenz QKeySequence zurück. Wenn die Sequenz nicht festgelegt ist, wird eine leere Sequenz QKeySequence("") zurückgegeben.

bool isEmpty()

Die Methode prüft, ob die Hotkey-Sequenz gesetzt ist oder nicht.

bool isEnabled()

Die Methode prüft, ob der Hotkey aktiviert ist oder nicht. Hotkey-Kombinationen können eingestellt werden, in diesem Fall gibt isEmpty() true zurück, aber sie können deaktiviert werden. Das heißt, das Hotkey-Aktivierungssignal wird nicht erzeugt.

bool setShortcut(const QKeySequence &keySequence)

Die Methode ist ein Slot und legt die Hotkey-Sequenz fest. Wenn in diesem Fall QKeySequence mehrere Tastenkombinationen enthält, werden sie alle registriert.

bool unsetShortcut()

Die Methode ist ein Slot und entfernt die Hotkey-Kombination, falls eine gesetzt wurde.

void setEnabled (bool aktivieren)

Die Methode ist ein Slot und wird verwendet, um die Aktivierung einer Hotkey-Kombination zu aktivieren und zu deaktivieren.

Signale

ungültig aktiviert ()

Hotkey-Aktivierungssignal, ausgelöst, wenn der Hotkey installiert und aktiviert ist.

Verwendung

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "qglobalshortcut.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void slotFirst();
    void slotSecond();

private:
    Ui::MainWindow *ui;
    QGlobalShortcut *shortcutFirst;
    QGlobalShortcut *shortcutSecond;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    shortcutFirst = new QGlobalShortcut(this);
    connect(shortcutFirst, &QGlobalShortcut::activated, this, &MainWindow::slotFirst);
    shortcutFirst->setShortcut(QKeySequence("Ctrl+E"));

    shortcutSecond = new QGlobalShortcut(this);
    connect(shortcutSecond, &QGlobalShortcut::activated, this, &MainWindow::slotSecond);
    shortcutSecond->setShortcut(QKeySequence("Ctrl+G"));

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::slotFirst()
{
    qDebug() << "First";
}

void MainWindow::slotSecond()
{
    qDebug() << "Second";
}

Anwendungsempfehlungen

Wenn eine Instanz der Klasse QGlobalShortcut erstellt wird, wird nativeEventFilter erstellt und in der gesamten Anwendung installiert. Gleichzeitig ist die Anzahl der Filter in der Anwendung nicht begrenzt (das heißt, Sie können mit dieser Klasse eine beliebige Anzahl globaler Hotkeys erstellen), aber der zuletzt eingestellte Filter funktioniert zuerst. In diesem Fall können Sie diese Klasse überall in der Anwendung verwenden.

Gleichzeitig ist es wichtig zu verstehen, dass man bei Verwendung dieser Klasse nicht genau wissen kann, in welcher Reihenfolge alle Filter gesetzt werden, was die Leistung einer Anwendung beeinträchtigen kann, die die Überprüfung auf andere Betriebssystemereignisse verwendet, und nicht nur globale Hotkeys. Das heißt, wenn Sie bereits eine von QAbstractNativeEventFilter geerbte Klasse verwenden und diesen Filter auf der Anwendung installiert haben, um eine Reihe von Systemereignissen damit zu verarbeiten, kann es sinnvoll sein, die Bibliothek nicht direkt zu verwenden, sondern einen Teil davon anzuwenden des Bibliothekscodes in Ihrer bereits bestehenden Klasse.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken