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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Win7 Qt Touchscreen  (Прочитано 8947 раз)
Dima
Гость
« : Декабрь 11, 2013, 12:00 »

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

Думаю стоит копать в сторону тач скрина. Есть разные версии тачей и они по разному обрабатывают нажатия. Те, которые мне встречались реагировали адекватно на нажатие - по сути притворялись в системе мышкой Улыбающийся
Записан
Dima
Гость
« Ответ #2 : Декабрь 11, 2013, 14:21 »

Цитировать
Думаю стоит копать в сторону тач скрина. Есть разные версии тачей и они по разному обрабатывают нажатия. Те, которые мне встречались реагировали адекватно на нажатие - по сути притворялись в системе мышкой
Ну тогда как объяснить разные глюки при разных версиях Qt? И остальные приложения в винде вроде работают адекватно

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

Почему? и что за это отвечает?
Записан
Bepec
Гость
« Ответ #3 : Декабрь 11, 2013, 15:57 »

Ещё раз напишу - каждый тач скрин имеет свои особенности. Это раз. Он может работать как мышка, может имитировать мышку, может просто посылать через драйвер координаты нажатия и клик.

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

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

PS А поведение Qt грамотное. Оно получает клик на заголовке окна, который обрабатывает оконный менеджер. Заголовок не является окном программы.
Записан
Dima
Гость
« Ответ #4 : Декабрь 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%
Записан
Bepec
Гость
« Ответ #5 : Декабрь 11, 2013, 16:37 »

Елотач моя прелесть Улыбающийся

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

Записан
Dima
Гость
« Ответ #6 : Декабрь 11, 2013, 16:50 »

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

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

также заметил если окный менеджер перестал работать то после нажатия на другое окно или рабочий стол (наше приложение теряет фокус) то тогда менеджер начинает работать.
Записан
Bepec
Гость
« Ответ #7 : Декабрь 11, 2013, 19:42 »

Я попросил заменить на QWidget. Со стандартным конструктором. Просто окно. Создать. Модальное. Всё. Сделайте это пожалуйста.
Записан
Dima
Гость
« Ответ #8 : Декабрь 12, 2013, 11:38 »

Я попросил заменить на QWidget. Со стандартным конструктором. Просто окно. Создать. Модальное. Всё. Сделайте это пожалуйста.

Аналогично. тыкаем за пределами окна (но в пределах родителя) а окну приходит MouseButtonPress с координаторами со знаком минус, хотя по идее это сообщение  должно поступить уже другому окну (родителю и тот должен заставить мерцать модальное окно).
Записан
Bepec
Гость
« Ответ #9 : Декабрь 12, 2013, 12:59 »

А как вы определили что ему приходит, если вы, надеюсь, создали обычного QWidget и установили флаг модальности?

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

Вот те три строки, которые я прошу вас сделать. И убрать нафиг все ваши обработки евентов/перехвата событий/installEventFilter/grabKeyboard/grabMouse.
Записан
Dima
Гость
« Ответ #10 : Декабрь 12, 2013, 15:19 »

А как вы определили что ему приходит, если вы, надеюсь, создали обычного QWidget и установили флаг модальности?

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

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

Да я так и создавал! сообщения ловил утилитой spyxx.exe от микрософта
Записан
Bepec
Гость
« Ответ #11 : Декабрь 12, 2013, 16:52 »

Ну тогда хз. Я б посоветовал попробовать версию Qt 4.7.2 ибо она у меня работала стабильно. Но и в 5 у меня проблем не было.

PS более помочь ничем не могу.
Записан
Dima
Гость
« Ответ #12 : Декабрь 13, 2013, 11:57 »

Ну тогда хз. Я б посоветовал попробовать версию Qt 4.7.2 ибо она у меня работала стабильно. Но и в 5 у меня проблем не было.

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

Напиши об этой проблеме Qtешникам. Пускай разгребут, "в эру сенсоров и такая лажа"
Записан
Bepec
Гость
« Ответ #13 : Декабрь 13, 2013, 12:19 »

Её и я то в принципе разгрести мог, был бы твой монитор у меня Улыбающийся Но с этим и проблема. Что можно проверять только с ним. А он не менее тридцадки стоит. Сам мучался когда на панельники программу писал. Всё только сам ^.^
Записан
Dima
Гость
« Ответ #14 : Декабрь 13, 2013, 15:42 »

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

Пока убрал фреймы Qt::FramelessWindowHint и добавил pushButton c close();
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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