Глобальная (в рамках приложения) обработка нажатий клавиш клавиатуры

Рейтинг: 0Ответов: 2Опубликовано: 10.07.2023

Есть приложение на Qt. В нем множество диалогов. Есть необходимость сделать вызов по нажатии какой либо кнопки, но, хотелось бы, сделать это глобально - один обработчик для всех форм/диалогов.

Как это все организовать?

Ответы

▲ 1Принят

решил так:

  1. сделал класс, методу которого в диалогах передается код нажатой клавиши
  2. Передал ссылку на объект этого класса в конструктор всех диалогов
  3. в диалогах перекрыл keyPressEvent и в нем вызываю метод объекта

вот так

может и немного коряво, но работает :-)

▲ 1

Еще есть такой опасный анти паттерн Singelton, его не рекомендуют из за сложностей с тестированием и при многопоточном программировании. Но если совсем немножко, то можно, он классный.

#include #include

class Singleton : public QObject { Q_OBJECT

public: static QSharedPointer create();

private: explicit Singleton(QObject *parent = nullptr); };

// singleton.cpp #include "singleton.h"

Singleton::Singleton(QObject *parent) : QObject(parent) { // Конструктор }

QSharedPointer Singleton::getInstance() { static QSharedPointer p = QSharedPointer::create(); return p; }