Russian Qt Forum
Ноябрь 24, 2024, 11:48
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Multi Multi
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Multi Multi (Прочитано 5584 раз)
OlegNik
Гость
Multi Multi
«
:
Февраль 10, 2017, 11:33 »
Добрый день.
Возникла проблема с подключением нового функционала приложения, а именно multi-touch (вернее проблема даже не в этом)
1. добавил в класс QWidget новый обработчик событий event, где вполне удачно реализовал моменты с реализацией (multi-touch) и трансляцию событий не относящихся к сему действу.
2. в конструкторе QWidget установил атрибуты setAttribute(Qt::WA_AcceptTouchEvents); - о чудо заработало (multitouch)
3. но увы!, события mousePressEvent реализованное для кнопок, помещенных в основной QWidget перестает срабатывать. (после отключения setAttribute(Qt::WA_AcceptTouchEvents) кнопочные действа восстанавливаются, но multi-touch понятно не срабатывает)
Прошу помочь решить данную проблему.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Multi Multi
«
Ответ #1 :
Февраль 10, 2017, 12:51 »
Там сложно, у QApplication есть 2 флажка - симулировать тач и мышь в зависимости от.
Возможно, они помогут.
Записан
OlegNik
Гость
Re: Multi Multi
«
Ответ #2 :
Февраль 10, 2017, 18:26 »
было бы неплохо озвучить эти флаги)
Записан
Apktyc
Самовар
Offline
Сообщений: 133
Re: Multi Multi
«
Ответ #3 :
Февраль 12, 2017, 11:03 »
Думаю речь о Qt::AA_SynthesizeTouchForUnhandledMouseEvents и Qt::AA_SynthesizeMouseForUnhandledTouchEvents (установлен по умолчанию) соответственно.
Если надо чтобы по касанию срабатывало что-то, как на клик мыши - то возможно стоит переопределить QObject::event() для кнопок и отлавливать QEvent::MouseButtonPress и QEvent::TouchBegin.
P.S. Как минимум у меня на Win7 встречается баг, что событие QEvent::TouchBegin (а соответственно и синтезированный QEvent::MouseButtonPress) не отсылается сразу после начала касания, в таком случае следует копать в сторону RegisterTouchWindow с TWF_WANTPALM.
«
Последнее редактирование: Февраль 12, 2017, 11:29 от Apktyc
»
Записан
OlegNik
Гость
Re: Multi Multi
«
Ответ #4 :
Февраль 13, 2017, 11:02 »
работаю под линукс
переопределил и отловил...
bool IDraw::event(QEvent* event)
{
if(event->type() == QEvent::TouchBegin ||
event->type() == QEvent::TouchUpdate ||
event->type() == QEvent::TouchEnd )
{
QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();
if (touchPoints.count() == 1)
{
switch (event->type())
{
case QEvent::TouchBegin:
{
QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
QTouchEvent::TouchPoint touchPoints = touchEvent->touchPoints().first();
QMouseEvent *e = new QMouseEvent(QEvent::MouseButtonPress,
touchPoints.pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
mousePressEvent(e);
}break;
case QEvent::TouchUpdate:
{
if(!_release2touch)
{
QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
QTouchEvent::TouchPoint touchPoints = touchEvent->touchPoints().first();
QMouseEvent *e = new QMouseEvent(QEvent::MouseMove,
touchPoints.pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
mouseMoveEvent(e);
}
}break;
case QEvent::TouchEnd:
{
_release2touch = false;
QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
QTouchEvent::TouchPoint touchPoints = touchEvent->touchPoints().first();
QMouseEvent *e = new QMouseEvent(QEvent::MouseButtonRelease,
touchPoints.pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
printf("TouchEnd\n");
mouseReleaseEvent(e);
}break;
default:
break;
}
}else ...
......
событие поступает в mousePress
void IDraw::mousePressEvent(QMouseEvent* pe)
{
isMousePressed = true;
pressedX = pe->x();
pressedY = pe->y();
printf("PRINTF:MOUSEPRESS pressedX:%d pressedY:%d\n", pressedX, pressedY); //Это строка печатается
if(gui->getAzimutButton()->isChecked())
{
// А вот сюда она не поступает с включенным атрибутом
// this->setAttribute(Qt::WA_AcceptTouchEvents);
// this->setAttribute(Qt::WA_TouchPadAcceptSingleTouchEvents);
}
Записан
Apktyc
Самовар
Offline
Сообщений: 133
Re: Multi Multi
«
Ответ #5 :
Февраль 13, 2017, 12:02 »
А не достаточно ли будет кнопке тоже разрешить обрабатывать касания (Qt::WA_AcceptTouchEvents), и подписаться на сигнал toggled к примеру?
Или в текущем коде, самостоятельно взводить флаг checked.
Записан
OlegNik
Гость
Re: Multi Multi
«
Ответ #6 :
Февраль 13, 2017, 12:11 »
конкретнее по подписку, если возможно конечно
Записан
Apktyc
Самовар
Offline
Сообщений: 133
Re: Multi Multi
«
Ответ #7 :
Февраль 13, 2017, 12:41 »
Ну, механизм сигналов и слотов, connect там, все дела, это знакомо?
Записан
OlegNik
Гость
Re: Multi Multi
«
Ответ #8 :
Февраль 13, 2017, 13:16 »
ну конечно, об чЁм речь)
код в конструкторе widgetА:
{
connect(gui->getZoomInButton(), SIGNAL(clicked()), this, SLOT(zoomIn()));
и т.д
this->setAttribute(Qt::WA_AcceptTouchEvents);
this->setAttribute(Qt::WA_TouchPadAcceptSingleTouchEvents);
}
Записан
Apktyc
Самовар
Offline
Сообщений: 133
Re: Multi Multi
«
Ответ #9 :
Февраль 13, 2017, 13:57 »
Ну так я и имел ввиду, выставить кнопке Qt::WA_AcceptTouchEvents, и по сигналу вызывать нужные слоты.
Проблема то приведенного кода, как я понял, что не срабатывает условие if(gui->getAzimutButton()->isChecked()), т.к. кнопка не переключает своего состояния от касаний.
Записан
OlegNik
Гость
Re: Multi Multi
«
Ответ #10 :
Февраль 14, 2017, 11:58 »
решил через жесты(gesture) Всем спасибо.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...