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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: как переопределить qwsEventFilter?  (Прочитано 5348 раз)
lisarden
Гость
« : Апрель 01, 2011, 23:10 »

Никак не могу разобраться каким образом можно определить qwsEventFilter! Перерыл весь инет, но результата нет.

Помогите какие-нибудь примером или советом
Записан
madRoger
Гость
« Ответ #1 : Апрель 01, 2011, 23:35 »

Может сначала поупражняться с обычным eventFilter. Суть та одна.
Записан
lisarden
Гость
« Ответ #2 : Апрель 01, 2011, 23:54 »

с этим я уже упражнялся. Он садится на какой-нибудь виджет и далее всё просто. А мне нужно не на виджет а на всю апликуху.

Сделал так:
myapp.h
Код:
class MyApp : public QApplication
{
public:
    MyApp(int &argc, char **argv ) : QApplication( argc, argv ) {};

    bool qwsEventFilter(QWSEvent * event);
};
myapp.cpp
Код:
#include "myapp.h"

bool MyApp::qwsEventFilter(QWSEvent *e)
{
    if(e->type == QEvent::KeyPress) {
        qDebug("pressed");
    }
    else if (e->type == QEvent::KeyRelease ) {
        qDebug("released");
    }
    return false;
}

main.c
Код:
#include <QtGui/QApplication>
#include "myapp.h"
#include "qt-linphone.h"

int main(int argc, char *argv[])
{
    MyApp a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

Не пишутся на консоль эти "pressed"/"released". Что не так?
Записан
madRoger
Гость
« Ответ #3 : Апрель 01, 2011, 23:59 »

Цитировать
e->type == QEvent::KeyPress
Вы сравниваете разные типы. Попробуйте e->type() ==QWSEvent::Key

UPD: Если использовать e->type() ==QWSEvent::Key , то, судя по документации, можно определить только активность клавиш. Но разобрать, нажата или отпущена клавиша не получится.
Можно преобразовать тип QWSEvent к QEvent так: QEvent *event = (QEvent *)e;
Тогда можно сравнивать как у вас в коде, то есть можно определить момент нажатия и момент отпускания.
if(event->type() == QEvent::KeyPress)
{......и так далее

Саму клавишу можно определить аналогично:
QKeyEvent *keyEvent = (QKeyEvent *)e;
        if( keyEvent->key() == Qt::Key_Return )
       {... и так далее.

Сам не проверял, предполагаю исходя из доков.
« Последнее редактирование: Апрель 02, 2011, 00:28 от madRoger » Записан
lisarden
Гость
« Ответ #4 : Апрель 02, 2011, 09:10 »

предположим, что с ивентами я не правильно работаю. Но если вставить отладку без условий, то в этот обработчик вообще исполнение не попадает.

я тут подумал, что проблема в версии Qt: ведь она у меня комповая, а не Qt-embedded. Может qws и не должен вовсе работать?
Записан
madRoger
Гость
« Ответ #5 : Апрель 02, 2011, 11:16 »

Возможно, проблема с версией и настройками Qt. Раньше embedded linux надо было качать отдельно. Насколько я помню, библиотека qt с поддержкой всего и вся пошла с 4.6.0. У нее в названии был префикс everywhere. И конечно же необходимо правильно настроить библиотеку. Советую обратиться к офф.сайту, там есть инфа.

http://doc.qt.nokia.com/latest/qt-embedded-install.html
http://doc.qt.nokia.com/latest/qws.html

Скачать можно из архива на ftp nokia: ftp.qt.nokia.com/qt/source/
Записан
lisarden
Гость
« Ответ #6 : Апрель 02, 2011, 13:48 »

Действительно, после того, как руками собрал библиотеку компилятором arm-linux-gnueabi и запустил на арме, то обработчик вида:

Код:
bool MyApp::qwsEventFilter(QWSEvent *e)
{
    if(e->type == QWSEvent::Key) {
        qDebug("key");
    }
    return false;
}
заработал. Буду дальше копать..
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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