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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Почему не сразу приходит QKeyEvent?  (Прочитано 7106 раз)
Caduceus
Гость
« : Июль 30, 2010, 12:22 »

Делаю в главном окне вот такое:
Код:
bool MyMainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (event->type()==QEvent::KeyPress)
{
QKeyEvent *keyevent = static_cast<QKeyEvent*>(event);
if (keyevent->key()==Qt::Key_F3 ) {inc(1);return true;}
if (keyevent->key()==Qt::Key_F4 ) {inc(5);return true;}
if (keyevent->key()==Qt::Key_F2 ) {dec(1);return true;}
if (keyevent->key()==Qt::Key_F1 ) {dec(5);return true;}
}
return QMainWindow::eventFilter(obj, event);
}

И как только запускаю прогу - не заходит он в ветку "if"  Но стоит в проге немного потыкаться, подергать контролы - и начинает заходить.. Что это?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Июль 30, 2010, 12:48 »

Видать нечего перехватывать при запуске Улыбающийся а как подергаешься, появляются события и фильтр работает.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Caduceus
Гость
« Ответ #2 : Июль 30, 2010, 12:56 »

Прога запускается, окно открывается. Окно проги активно. Жму - и ничего. Не понятно почему.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Июль 30, 2010, 14:38 »

Возможно фокус стоит на другом виджете. Попробуй явно передать фокус при помощи setFocus
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Caduceus
Гость
« Ответ #4 : Июль 30, 2010, 14:44 »

Так при чем тут виджет. Я ж у MainWindow переопределил. Туда разве не все сыпятся?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Июль 30, 2010, 14:58 »

Если фокус стоит на QLineEdit, то причем тут MainWindow?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Caduceus
Гость
« Ответ #6 : Июль 30, 2010, 15:24 »

Эмм, я думал он всех ловит, а потому уже по детям распределяет....

А куда сунуть, чтоб все сообщеняи клавы всегда ловились?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Июль 30, 2010, 15:38 »

>>Я ж у MainWindow переопределил. Туда разве не все сыпятся?
а на какой объект фильтр событий поставил?
Если у тебя, например, два lineEdit1 и lineEdit2, фильтр стоит только на первый. А по умолчанию фокус на втором. То этот второй и получает события.

Попробуй сделать, как pastor говорит
Записан

Юра.
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #8 : Июль 30, 2010, 15:44 »

Код:
А куда сунуть, чтоб все сообщеняи клавы всегда ловились?
object->installEventFilter(this);

Где object - указатель на объект, с которого нужно ловить события.
Если нужно со всех, поставь на все фильтр.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Caduceus
Гость
« Ответ #9 : Июль 30, 2010, 15:56 »

Так у меня и есть в кончтрукторе главного окна installEventFilter(this);
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #10 : Июль 30, 2010, 16:03 »

Цитировать
Так у меня и есть в кончтрукторе главного окна installEventFilter(this);
Я имею ввиду, например есть у тебя в главном окне QTextEdit и ты хочешь, чтобы с него тоже обрабатывались события в eventFilter, тогда в конструкторе также:
Код:
textEdit->installEventFilter(this);
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


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

Так у меня и есть в кончтрукторе главного окна installEventFilter(this);
а какой смысл ставить фильтр событий на самого себя, они и так прийдут
Записан

Юра.
Caduceus
Гость
« Ответ #12 : Июль 30, 2010, 16:11 »

2kibsoft
И что так для всех детей?Непонимающий

2lit-uriy
А вон нифига. Не заходил он в эту функецию пока так не проинсталлил

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

Сообщений: 3880


Просмотр профиля WWW
« Ответ #13 : Июль 30, 2010, 16:17 »

>>Не заходил он в эту функецию пока
блин, а с чего ради он в неё будет заходит? Эта функция - обработчик события фильтра.
А для обработки событий клавиатуры есть своя функция.
Записан

Юра.
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #14 : Июль 30, 2010, 16:22 »

Цитировать
И что так для всех детей?
Ну для всех виджетов, которые хочешь обрабатывать. Я не уверен, что тебе понадобиться обрабатывать клавиши с label'а например..
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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