Russian Qt Forum
Ноябрь 25, 2024, 04:34
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Перетаскивание окон и потоки
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Перетаскивание окон и потоки (Прочитано 8374 раз)
Mityai
Гость
Перетаскивание окон и потоки
«
:
Март 02, 2010, 10:09 »
Доброго времени суток! Столкнулся с такой проблемой - мной создан дополнительный поток приложения, который постоянно выдает изменившуюся информацию для отображения. Проблема состоит в том, что при попытке перетащить какое-либо окно приложения по экрану поток вроде бы "засыпает", и выдача информации приостанавливается. Окон приложения несколько, поэтому даже если невозможно сделать перерисовку в непосредственно перетаскиваемом окне, было бы неплохо продолжить выдачу данных для других окон. Взаимодествие с потоком происходит сигнально-слотовым методом. Буду благодарен за любой совет!
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Перетаскивание окон и потоки
«
Ответ #1 :
Март 02, 2010, 10:31 »
насколько я помню, на каких-то ОС перетаскивание окна блокирует главный цикл. Однако эвенты все равно приходят и накапливаются в буфере. Они будут обработаны все разом при отпускании мыши. Короче, могу ошибаться, но такое поведение нормально.
Записан
Mityai
Гость
Re: Перетаскивание окон и потоки
«
Ответ #2 :
Март 02, 2010, 10:35 »
Нет, в общем-то если бы эвенты накапливались, а потом приходили все разом, это был бы не худший вариант, но то ли я как-то не так написал, то ли что, но у меня именно обработка приостанавливается и возобновляется только после отпускания окна. То есть по сути эвенты даже не появляются. Если нужен код, могу в принципе собрать из него что-то удобоваримое.
«
Последнее редактирование: Март 02, 2010, 10:43 от Mityai
»
Записан
SASA
Гость
Re: Перетаскивание окон и потоки
«
Ответ #3 :
Март 02, 2010, 11:04 »
На сколько я понимаю, это особенность Qt. Победить это нельзя.
Записан
Mityai
Гость
Re: Перетаскивание окон и потоки
«
Ответ #4 :
Март 02, 2010, 11:10 »
2 SASA:
А чисто теоритически с чем это может быть связано? Событие "сдвиг окна" блокирует выполнение любой остальной части кода?
Записан
ритт
Гость
Re: Перетаскивание окон и потоки
«
Ответ #5 :
Март 02, 2010, 14:23 »
при чём тут особенность кутэ?
Mityai: ты же под вендой, да? открой консоль и запусти сборку хоть того же кутэ - а теперь попробуй перемещать окно с консолью...
Записан
Mityai
Гость
Re: Перетаскивание окон и потоки
«
Ответ #6 :
Март 02, 2010, 15:15 »
2 Константин:
Намекаете на то, что это Винда вся по своей сути в этом отношении кривая? Просто ради интереса запустил простейшую Косынку; там время при перетаскивании все же обновляется. Хотя в том же Пинболе ситуация схожа моей.
«
Последнее редактирование: Март 02, 2010, 15:32 от Mityai
»
Записан
kkk777kkk
Гость
Re: Перетаскивание окон и потоки
«
Ответ #7 :
Март 02, 2010, 15:49 »
для примера запустил свою прожку, которая просто берет и рисует синус, при перетаскивании перерисовывается нормально, правда точки добавляются постоянно и после каждой виджету update()
Записан
ритт
Гость
Re: Перетаскивание окон и потоки
«
Ответ #8 :
Март 02, 2010, 16:37 »
я не намекал на кривость. я лишь говорил о том, что это - известная проблема.
но как я сам с ней боролся уже не помню...
Записан
Mityai
Гость
Re: Перетаскивание окон и потоки
«
Ответ #9 :
Март 02, 2010, 16:43 »
2 Константин:
А хоть в каком направлении копать? Попробовать у нас на форуме или нужны более глобальные поиски вариантов работы с оконными приложениями Виндоуз в целом, не только для Qt?
Записан
ритт
Гость
Re: Перетаскивание окон и потоки
«
Ответ #10 :
Март 02, 2010, 18:04 »
здесь точно что-то подобное обсуждалось (в первой ветке, наверное). а так - гугль, яндех и т.п.
Записан
Mityai
Гость
Re: Перетаскивание окон и потоки
«
Ответ #11 :
Март 03, 2010, 09:26 »
Всем спасибо за помощь! Если вспомнится что-то новое, пишите. Если найду решение сам, тоже отпишусь!
Записан
Mityai
Гость
Re: Перетаскивание окон и потоки
«
Ответ #12 :
Апрель 07, 2010, 10:09 »
Наконец нашел возможность немножко заняться этой проблемой. Собственно, копание мануала дало мне следующие результаты:
1) Нашлась функция void QWidget::moveEvent ( QMoveEvent * event ), которая реагирует на перемещение окна, но, как не сложно догадаться, тупой тык мышкой в Title Bar и удержание кнопки без движения окна она не ловит.
2) Существует конструкция Qt::EventPriority. Хотелось бы выяснить реально ли навесить paintEvent приоритет выше, чем на нажатие Title Bar, как это сделать и не приведет ли это к печальным последствиям в обработке событий.
3) bool QGraphicsWidget::windowFrameEvent ( QEvent * event ), одно из возможно возвращаемых событий как раз Qt::TitleBarArea. Но как я понял, QWidget, от которого мы по умолчанию наследуемся, и QGraphicsWidget - множко разные вещи и вытащить мне оттуда этот эвент не удастся. Может кто-нидь работал с QGraphicsWidget? Поделитесь, пожалуйста впечатлениями.
В дополнение к первому вопросу, может есть возможность отловить mouseEvent при попадании курсора по всей ширине и длине Title Bar? Или он все-таки распространяется исключительно на клиентскую часть окна и никак это не изменить? Камрады, слово за вами...
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Перетаскивание окон и потоки
«
Ответ #13 :
Апрель 07, 2010, 14:46 »
видимо проблема с синхронизацией дополнительного потока, если имеется в виду QThread, и с типом соединения, через которое поток посылает сообщения в главное окно
проверил сейчас у себя, запустил в параллельном потоке в фоне вывод в один из доков, который лежит в главном окне, и начал все приложение таскать - внимание - параллельно работающая нить QThread
останавливается, как только берусь за рамку главного окна
, не важно, с какой целью - перемещать или изменять масштаб
если ковыряться в других доках, которые в главной нити, связанной с главным окном, то второй поток работает без фокусов
кстати, интересно... хотелось бы иметь возможность выполнения параллельной нити, когда окно меняется, хотя сейчас для меня это не обязательно
Записан
2^7-1 == 127, задумайтесь...
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...