Russian Qt Forum
Сентябрь 24, 2024, 02:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Global hotkeys  (Прочитано 13815 раз)
QCasper
Гость
« : Ноябрь 29, 2007, 12:09 »

Собсно сабж. Как отловить и обработать нажатие клавиши (или их комбинаций), даже если виджет не имеет фокус или спрятан? Или даже если его вообще нет и не было...
Записан
ритт
Гость
« Ответ #1 : Ноябрь 29, 2007, 12:22 »

в libqxt глобальные хоткеи видел...можно оттуда тренькнуть
Записан
Dodge
Гость
« Ответ #2 : Ноябрь 29, 2007, 14:08 »

в libqxt глобальные хоткеи видел...можно оттуда тренькнуть
+1.

Я вообще выдергивал код из psi. Единственная заморочка с этим, точто psi на qt 3 ))
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Ноябрь 29, 2007, 14:46 »

Единственная заморочка с этим, точто psi на qt 3 ))

Уже есть и на Qt4

http://forum.psi-im.org/thread/4659
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #4 : Ноябрь 15, 2008, 21:08 »

Единственная заморочка с этим, точто psi на qt 3 ))

Уже есть и на Qt4

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

Кто небуть достал от туда код глобальных клавиш ?
Записан
BRE
Гость
« Ответ #5 : Ноябрь 15, 2008, 22:02 »

Кто небуть достал от туда код глобальных клавиш ?
Посмотрел, вроде все нужное лежит отдельно в /src/tools/globalshortcut.
Записан
Prm
Гость
« Ответ #6 : Сентябрь 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;

    ....
}


Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Сентябрь 16, 2009, 17:38 »

          //ловим и обрабатываем все события приложения

ключевая ошибка
Записан
Prm
Гость
« Ответ #8 : Сентябрь 17, 2009, 11:18 »

Разве это ошибка  Улыбающийся. В топике явно не указано, что интересуют именно события системы, вот и попутал немного.

Но для приложения вариант классный!
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #9 : Сентябрь 17, 2009, 13:03 »

Разве это ошибка  Улыбающийся. В топике явно не указано, что интересуют именно события системы, вот и попутал немного.

Здрастье, в теме это указано два раза Улыбающийся
Записан
jeno
Гость
« Ответ #10 : Апрель 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)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Апрель 26, 2010, 06:16 »

virtual ~ShortCutter() {}
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
jeno
Гость
« Ответ #12 : Апрель 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 и т.п.  В замешательстве (те.сообщений о нажатии клавиш нет)

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

Сообщений: 2901



Просмотр профиля WWW
« Ответ #13 : Апрель 26, 2010, 11:13 »

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

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.136 секунд. Запросов: 22.