Russian Qt Forum

Qt => Общие вопросы => Тема начата: QCasper от Ноябрь 29, 2007, 12:09



Название: Global hotkeys
Отправлено: QCasper от Ноябрь 29, 2007, 12:09
Собсно сабж. Как отловить и обработать нажатие клавиши (или их комбинаций), даже если виджет не имеет фокус или спрятан? Или даже если его вообще нет и не было...


Название: Re: Global hotkeys
Отправлено: ритт от Ноябрь 29, 2007, 12:22
в libqxt глобальные хоткеи видел...можно оттуда тренькнуть


Название: Re: Global hotkeys
Отправлено: Dodge от Ноябрь 29, 2007, 14:08
в libqxt глобальные хоткеи видел...можно оттуда тренькнуть
+1.

Я вообще выдергивал код из psi. Единственная заморочка с этим, точто psi на qt 3 ))


Название: Re: Global hotkeys
Отправлено: pastor от Ноябрь 29, 2007, 14:46
Единственная заморочка с этим, точто psi на qt 3 ))

Уже есть и на Qt4

http://forum.psi-im.org/thread/4659


Название: Re: Global hotkeys
Отправлено: IGHOR от Ноябрь 15, 2008, 21:08
Единственная заморочка с этим, точто psi на qt 3 ))

Уже есть и на Qt4

http://forum.psi-im.org/thread/4659

Кто небуть достал от туда код глобальных клавиш ?


Название: Re: Global hotkeys
Отправлено: BRE от Ноябрь 15, 2008, 22:02
Кто небуть достал от туда код глобальных клавиш ?
Посмотрел, вроде все нужное лежит отдельно в /src/tools/globalshortcut.


Название: Re: Global hotkeys
Отправлено: Prm от Сентябрь 16, 2009, 13:15
Можно проще. Создаем класс ShortCutter, вставляем экземпляр в main(). Все события валятся в написанную нами функцию. Быстро, просто, кроссплатформенно!


#ifndef SHORTCUTTER_H_
#define SHORTCUTTER_H_

#include <QEvent>
#include <QObject>

class ShortCutter: public QObject
{
protected:
     bool eventFilter(QObject *obj, QEvent *ev)
     {
          //ловим и обрабатываем все события приложения
   
     }
public:
    ShortCutter()
    {
        QApplication::instance()->installEventFilter(this);
    };

    virtual ~ShortCutter();
};

#endif /* SHORTCUTTER_H_ */


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    ShortCutter sc;

    ....
}




Название: Re: Global hotkeys
Отправлено: Alex Custov от Сентябрь 16, 2009, 17:38
          //ловим и обрабатываем все события приложения

ключевая ошибка


Название: Re: Global hotkeys
Отправлено: Prm от Сентябрь 17, 2009, 11:18
Разве это ошибка  :). В топике явно не указано, что интересуют именно события системы, вот и попутал немного.

Но для приложения вариант классный!


Название: Re: Global hotkeys
Отправлено: Alex Custov от Сентябрь 17, 2009, 13:03
Разве это ошибка  :). В топике явно не указано, что интересуют именно события системы, вот и попутал немного.

Здрастье, в теме это указано два раза :)


Название: Re: Global hotkeys
Отправлено: jeno от Апрель 26, 2010, 00:43
Прошу прощения, попробовал использовать ваш класс (ShortCutter) в своем приложении, при сборке выдает ошибки =(

tmp/obj/release_shared/main.o:main.cpp::-1: error: undefined reference to `vtable for ShortCutter'
tmp/obj/release_shared/main.o:main.cpp::-1: error: undefined reference to `ShortCutter::~ShortCutter()'
tmp/obj/release_shared/main.o:main.cpp::-1: error: undefined reference to `ShortCutter::~ShortCutter()'
:-1: error: collect2: ld returned 1 exit status


вот так вот в main.cpp:
Код
C
#include <QApplication>
#include <QLabel>
 
#include "shapedclock.h"
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   ShortCutter sc;
 
   ShapedClock clock;
   clock.show();
 
   return app.exec();
}

а вот так вот shapedclock.h:

Код
C
#include <QApplication>
#include <QEvent>
#include <QObject>
 
#include <QWidget>
 
// глобальные клавиши
#ifndef SHORTCUTTER_H_
#define SHORTCUTTER_H_
 
 
class ShortCutter: public QObject
{
protected:
    bool eventFilter(QObject *obj, QEvent *ev)
    {
         //ловим и обрабатываем все события приложения
         return false;
    }
public:
   ShortCutter()
   {
       QApplication::instance()->installEventFilter(this);
   };
 
   virtual ~ShortCutter();
};
 
#endif


как это можно исправить? =\ (хотел бы использовать этот класс для глобальных горячих клавиш в своем приложении)

OS: windows 7
Qt: 4.6 (qt creator 1.3.0)


Название: Re: Global hotkeys
Отправлено: Пантер от Апрель 26, 2010, 06:16
virtual ~ShortCutter() {}


Название: Re: Global hotkeys
Отправлено: jeno от Апрель 26, 2010, 10:59
а оно должно ловить сигналы системы ?

вот я сделал qDebug() << ev; , когда моя программа активна (фокус на ней), нажимаю на клавиши и получаю:

QKeyEvent(KeyRelease, 4f, 0, ""o"", false, 1)
QKeyEvent(KeyRelease, 57, 0, ""w"", false, 1)
QKeyEvent(KeyRelease, 45, 0, ""e"", false, 1)
QKeyEvent(KeyRelease, 52, 0, ""r"", false, 1)


а когда нажимаю на любой другую программу (например, проводник windows), в debug только сообщения QPaintEvent и т.п.  :-\ (те.сообщений о нажатии клавиш нет)

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


Название: Re: Global hotkeys
Отправлено: pastor от Апрель 26, 2010, 11:13
пс.мне оно надо для глобальных горячих клавиш в моей программе, например что при просмотре фильма можно было менять громкость определенной комбинацией клавишь...

Помоему в топике об этом сказано, что ShortCutter работает только в приделах приложения