Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Dima от Декабрь 11, 2013, 12:00



Название: Win7 Qt Touchscreen
Отправлено: Dima от Декабрь 11, 2013, 12:00
Здравствуйте!
Touchscreen работает в режиме - мышь.
Но вот возникли проблемы - заголовки окон, то есть виндовые кнопки: закрыть окно, расширить … не работают если нажимать с точскрина.
Проект Был написан в Qt 5.0.2 тогда с заголовками окон проблем не было но все кнопки пушБаттон нажимались дважды.
Скачал Qt 5.1.1 c пушБаттон проблема ушла, но начались с заголовками окон.
Реакция на обычную мышь нормальная.
Переопределил событие  mousePressEvent(QMouseEvent *e);
Так вот при нажатие с точскрина в область заголовка окна приходит сообщение с координатами нажатия , пример  х 100у-8, то есть винда, его не отрабатавает с мышью такие координаты "в не рамки окна" не приходят и окно нормально реагирует.
Куда копать?


Название: Re: Win7 Qt Touchscreen
Отправлено: Bepec от Декабрь 11, 2013, 14:15
Думаю стоит копать в сторону тач скрина. Есть разные версии тачей и они по разному обрабатывают нажатия. Те, которые мне встречались реагировали адекватно на нажатие - по сути притворялись в системе мышкой :)


Название: Re: Win7 Qt Touchscreen
Отправлено: Dima от Декабрь 11, 2013, 14:21
Цитировать
Думаю стоит копать в сторону тач скрина. Есть разные версии тачей и они по разному обрабатывают нажатия. Те, которые мне встречались реагировали адекватно на нажатие - по сути притворялись в системе мышкой
Ну тогда как объяснить разные глюки при разных версиях Qt? И остальные приложения в винде вроде работают адекватно

при нажатие на заглавление окна мышью приходит сообщение  - QEvent::NonClientAreaMouseButtonPress
при нажатие тудаже с точскрина приходит - QEvent::MouseButtonPress (кордината у в минусе)

Почему? и что за это отвечает?


Название: Re: Win7 Qt Touchscreen
Отправлено: Bepec от Декабрь 11, 2013, 15:57
Ещё раз напишу - каждый тач скрин имеет свои особенности. Это раз. Он может работать как мышка, может имитировать мышку, может просто посылать через драйвер координаты нажатия и клик.

Во вторых вы не привели ни кода вашей программы, ни каких либо описаний её. Вдруг вы сами обрабатываете ваши "нажатия" и чего - то напортачили?

В третьих за ВСЕ крестики на окнах отвечает оконный менеджер WINDOWS! Он одинаково работает со ВСЕМИ окнами, за исключением тех, которые сами отрисовывают свои заголовки и сами же обрабатывают нажатия.

PS А поведение Qt грамотное. Оно получает клик на заголовке окна, который обрабатывает оконный менеджер. Заголовок не является окном программы.


Название: Re: Win7 Qt Touchscreen
Отправлено: Dima от Декабрь 11, 2013, 16:25
Цитировать
А поведение Qt грамотное. Оно получает клик на заголовке окна, который обрабатывает оконный менеджер. Заголовок не является окном программы.
Так в этом и проблема - не обрабатывает оконный менеджер...

код :
Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.showFullScreen();
    return a.exec();
}

Код:
void MainWindow::ClicM()
{
     QDialogM dlg(this);
        dlg.setModal(true);
        dlg.exec();
}
QDialogM  создан в Qt designer никакие event не использую....

после создания дилог  QDialogM   не закрывается от точскрина от мыши все нормально
Монитор ЕТ2243L http://www.elotouch.com/

PS такой глюк проявляется в 95%


Название: Re: Win7 Qt Touchscreen
Отправлено: Bepec от Декабрь 11, 2013, 16:37
Елотач моя прелесть :)

Хм... Диалог... А если заменить диалог на QWidget нормально отработает?



Название: Re: Win7 Qt Touchscreen
Отправлено: Dima от Декабрь 11, 2013, 16:50
Цитировать
Хм... Диалог... А если заменить диалог на QWidget нормально отработает?

Код:
QWidget *wd = new QWidget(this,Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::Dialog);
        wd->show();
работает аналогично.

также заметил если окный менеджер перестал работать то после нажатия на другое окно или рабочий стол (наше приложение теряет фокус) то тогда менеджер начинает работать.


Название: Re: Win7 Qt Touchscreen
Отправлено: Bepec от Декабрь 11, 2013, 19:42
Я попросил заменить на QWidget. Со стандартным конструктором. Просто окно. Создать. Модальное. Всё. Сделайте это пожалуйста.


Название: Re: Win7 Qt Touchscreen
Отправлено: Dima от Декабрь 12, 2013, 11:38
Я попросил заменить на QWidget. Со стандартным конструктором. Просто окно. Создать. Модальное. Всё. Сделайте это пожалуйста.

Аналогично. тыкаем за пределами окна (но в пределах родителя) а окну приходит MouseButtonPress с координаторами со знаком минус, хотя по идее это сообщение  должно поступить уже другому окну (родителю и тот должен заставить мерцать модальное окно).


Название: Re: Win7 Qt Touchscreen
Отправлено: Bepec от Декабрь 12, 2013, 12:59
А как вы определили что ему приходит, если вы, надеюсь, создали обычного QWidget и установили флаг модальности?

PS такое чувство что вы городите какую то фигню с перехватом событий и грабом мыши. Сделайте стандартный QWidget млеа :)
Код:
QWidget * widget = new QWidget();
widget->setWindowModality(Qt::ApplicationModal);
widget->show();

Вот те три строки, которые я прошу вас сделать. И убрать нафиг все ваши обработки евентов/перехвата событий/installEventFilter/grabKeyboard/grabMouse.


Название: Re: Win7 Qt Touchscreen
Отправлено: Dima от Декабрь 12, 2013, 15:19
А как вы определили что ему приходит, если вы, надеюсь, создали обычного QWidget и установили флаг модальности?

PS такое чувство что вы городите какую то фигню с перехватом событий и грабом мыши. Сделайте стандартный QWidget млеа :)
Код:
QWidget * widget = new QWidget();
widget->setWindowModality(Qt::ApplicationModal);
widget->show();

Вот те три строки, которые я прошу вас сделать. И убрать нафиг все ваши обработки евентов/перехвата событий/installEventFilter/grabKeyboard/grabMouse.

Да я так и создавал! сообщения ловил утилитой spyxx.exe от микрософта


Название: Re: Win7 Qt Touchscreen
Отправлено: Bepec от Декабрь 12, 2013, 16:52
Ну тогда хз. Я б посоветовал попробовать версию Qt 4.7.2 ибо она у меня работала стабильно. Но и в 5 у меня проблем не было.

PS более помочь ничем не могу.


Название: Re: Win7 Qt Touchscreen
Отправлено: Dima от Декабрь 13, 2013, 11:57
Ну тогда хз. Я б посоветовал попробовать версию Qt 4.7.2 ибо она у меня работала стабильно. Но и в 5 у меня проблем не было.

PS более помочь ничем не могу.

Напиши об этой проблеме Qtешникам. Пускай разгребут, "в эру сенсоров и такая лажа"


Название: Re: Win7 Qt Touchscreen
Отправлено: Bepec от Декабрь 13, 2013, 12:19
Её и я то в принципе разгрести мог, был бы твой монитор у меня :) Но с этим и проблема. Что можно проверять только с ним. А он не менее тридцадки стоит. Сам мучался когда на панельники программу писал. Всё только сам ^.^


Название: Re: Win7 Qt Touchscreen
Отправлено: Dima от Декабрь 13, 2013, 15:42
Тут не в мониторе проблема а в Qt так как в разных версиях Qt разные глюки... (и глюки только в приложениях Qt) но думаю в ближайшие время протестирую на сенсорном моноблоке. (думаю проблема будет аналогична).

Пока убрал фреймы Qt::FramelessWindowHint и добавил pushButton c close();


Название: Re: Win7 Qt Touchscreen
Отправлено: Bepec от Декабрь 13, 2013, 22:53
Но мне кажется что у вас что-то в программе/вашей сборке Qt(если собирали сами) :) Ибо elo touch имитирует мышку. А работа с мышкой на уровне системы одинаково для всех приложений.

PS как самый простой вариант перекинуть туда приложение из примеров Qt. Вот как оно отработает отпишите :) Ибо не верится всё равно :)


Название: Re: Win7 Qt Touchscreen
Отправлено: Dima от Декабрь 16, 2013, 09:43
Но мне кажется что у вас что-то в программе/вашей сборке Qt(если собирали сами) :) Ибо elo touch имитирует мышку. А работа с мышкой на уровне системы одинаково для всех приложений.

PS как самый простой вариант перекинуть туда приложение из примеров Qt. Вот как оно отработает отпишите :) Ибо не верится всё равно :)

Qt я сам не собирал. я поставил Qt 5.2.0 for Windows 32-bit (MinGW 4.8, OpenGL, 689 MB) (Info)