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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: как получить события нажатия клавиш глобально?  (Прочитано 2501 раз)
virtual_root
Гость
« : Декабрь 07, 2012, 17:16 »

Добрый вечер. Ребята подскажите мне пожалуйста, возможно ли мне из класса унаследованного от QObject получить событие нажатия клавиши? Что-то у меня не выходит..
Вот как я делаю:
Код
C++ (Qt)
#ifndef KEYBOARD_H
#define KEYBOARD_H
#include <QObject>
#include <QtDeclarative>
#include <QKeyEvent>
 
namespace viewer {
   class Keyboard: public QObject
   {
       Q_OBJECT
   public:
       Keyboard(QObject *parent = 0);
       ~Keyboard();
   signals:
       void Pressed        ();
       void Released       ();
 
   protected:
       bool eventFilter (QObject *, QEvent *);
   };
}
#endif // KEYBOARD_H
Код
C++ (Qt)
#include "keyboard.h"
namespace viewer{
   Keyboard::Keyboard(QObject *parent) :
       QObject(parent)
   {
       this->installEventFilter (this);
 
   }
 
   Keyboard::~Keyboard (){
 
   }
 
   bool Keyboard::eventFilter (QObject *obj, QEvent *event){
       if (event->type() == QEvent::KeyPress)
          qDebug ()<< "это точно нужно";
     return QObject::eventFilter (obj,event);
   }
}
 
Код:
#include <QtGui/QApplication>
#include <QTextCodec>

#include "logging/logging.hpp"
#include "viewer/application.hpp"
#include "viewer/utils/keyboard.h"

using namespace viewer;

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

    logging::init4file("viewer");
    logging::init4console();

    QTextCodec::setCodecForCStrings( QTextCodec::codecForName("UTF-8") );
    QTextCodec::setCodecForTr( QTextCodec::codecForName("UTF-8") );

    Application app(argc, argv);

    Keyboard *key = new Keyboard();

    int ret = app.exec();
    return ret;
}
подскажите мне пожалуйста, что я делаю не так?
« Последнее редактирование: Декабрь 07, 2012, 17:28 от tiny developer » Записан
virtual_root
Гость
« Ответ #1 : Декабрь 07, 2012, 17:31 »

я даже не попадаю в функцию eventFilter... И как я понимаю это потому что у моего класса нет окна, а значит и нет фокуса. Как же быть в такой ситуации? Мне не нужно окно, мне просто нужно ловить нажатия клавиш на клавиатуре. Может у кого есть идеи?
Записан
virtual_root
Гость
« Ответ #2 : Декабрь 07, 2012, 18:21 »

уже справилась с проблемой! Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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