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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Глюк с virtual event() у MainWindow в Android  (Прочитано 3948 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Октябрь 02, 2017, 16:58 »

До сих пор с таким чудом не сталкивался. Обработчик event() в MainWindow в приложении для Android хронически пропускает через один DoubleClick. То есть, в нём есть

Код:
if( e->type() == QEvent::MouseButtonDblClick ) ...

Так вот оно true... на каждые 2 подряд двойных тапа на экран. Можно даже смело делать 4 тапа быстро подряд, чтобы гарантированно сработало. Сделал вывод в консоль - чего там в type() на самом деле, и получаю на первый двойной тап - только MouseButtonPress. Если через любой промежуток времени ещё раз сделать двойной тап, то прилетает MouseButtonDblClick.

НО! При этом я открываю ещё одно окно, тоже наследующее от MainWindow, и в нём тоже ловлю event() также точно - а там всё правильно работает.

Первое главное окно довольно сложное, на нём много всего. Пока не знаю, куда копать. Может кто уже сталкивался? Очевидно существенно, что это всё в Android.
Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Октябрь 02, 2017, 17:15 »

Я смотрел-бы в первую очередь все установленные eventFilters.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Октябрь 02, 2017, 17:29 »

Я смотрел-бы в первую очередь все установленные eventFilters.
Код:
bool MainWindow::event(QEvent *e)
{
    if( e->type()!=QEvent::UpdateRequest) qDebug()<<e->type();
    if( e->type() == QEvent::MouseButtonDblClick )
    {
............
    }
    if( e->type() == QEvent::HoverMove )
    {
............
    }
    return e->type() == QEvent::Gesture ? gesture( static_cast<QGestureEvent*>( e ) )
                                        : QWidget::event( e );
}
Больше ничего нет. Есть только перехваты жестов в конструкторе
Код:
    grabGesture(Qt::PinchGesture);
    grabGesture(Qt::TapAndHoldGesture);
    grabGesture(Qt::TapGesture);
Всё.
Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #3 : Октябрь 02, 2017, 17:33 »

Вы писали, что MainWindow сложный виджет, возможно сообщения перехватывают его дочерние виджеты.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Октябрь 02, 2017, 17:53 »

Вы писали, что MainWindow сложный виджет, возможно сообщения перехватывают его дочерние виджеты.

Те, которые перехыватывают - те перехватывают (кнопки, слайдеры), через них вообще тапы не проходят. Проблема с тапами туда, где нет перехватывающих виджетов. Там есть только виджеты, которые рисуют, у них нет перегруженных event(). И под ними QGraphicsView со сценой. Но во втором окне, которое правильно работает, тоже есть QGraphicsView со сценой. То есть, проблема не в них.

И потом - если бы перехватывали, то перехватывали бы каждый двойной тап, а не через один.
Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #5 : Октябрь 02, 2017, 17:59 »

Долго не искал, для примера.
В qeffects.cpp есть QAlphaWidget, который устнавливает фильтр событий от самого qApp и обрабатывает двойной клик. И уверен таких классов относящихся к QGraphicsXXX еще масса.

А так дело ваше, не они - так не они.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #6 : Октябрь 02, 2017, 18:11 »

Долго не искал, для примера.
В qeffects.cpp есть QAlphaWidget, который устнавливает фильтр событий от самого qApp и обрабатывает двойной клик. И уверен таких классов относящихся к QGraphicsXXX еще масса.

А так дело ваше, не они - так не они.

В проблемных местах либо QLabel, лежащий на QGraphicsProxyWidget, либо производный от QWidget мой класс, также лежащий на QGraphicsProxyWidget. А прокси в свою очередь на QGraphicsScene и соответственно QGraphicsView. Всё.

Что самое странное - первый раз, то есть после запуска приложения, дабл-тап нормально пропускается. Второй раз уже нет.
« Последнее редактирование: Октябрь 02, 2017, 18:16 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #7 : Октябрь 02, 2017, 18:51 »

ЫЫЫЫ!!!!.... Установил приложение на смартфон с Android 6 - глюка нет. Всё работает как полагается. Глюк есть на планшете с CyanogenMod 10.1 ака Android 4.1.1.  Злой
 
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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