Russian Qt Forum
Апреля 24, 2025, 01:54
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Зона курсора
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Зона курсора (Прочитано 7981 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Зона курсора
«
:
Февраля 12, 2014, 10:12 »
Добрый день
На виджете нарисована линия, при "наезде" на нее курсор должен измениться показывая что линию можно передвинуть. Должен ли я отслеживать mouseMove или есть более приятное/высокоуровневое решение?
Спасибо
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Зона курсора
«
Ответ #1 :
Февраля 12, 2014, 10:16 »
Сделать из линии виджет.
Записан
_OLEGator_
Гость
Re: Зона курсора
«
Ответ #2 :
Февраля 12, 2014, 10:25 »
Странный вопрос от "гуру". Если ты самостоятельно рисуешь линию, то о ней знаешь только ты - соответственно только mouseMove.
А так есть QGraphicsScene.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Зона курсора
«
Ответ #3 :
Февраля 12, 2014, 10:37 »
Цитата: Old от Февраля 12, 2014, 10:16
Сделать из линии виджет.
Нельзя из др соображений
Цитата: _OLEGator_ от Февраля 12, 2014, 10:25
Странный вопрос от "гуру". Если ты самостоятельно рисуешь линию, то о ней знаешь только ты - соответственно только mouseMove.
mouseMove просто так не получить, а лезть через notify не тянет. Может событие тултипа задействовать, но тогда не видно как быстро сбросить установленный курсор. Возня с таймером тоже выглядит неаккуратно. В общем я ожидал большего от знатоков UI/графики
Записан
Hellraiser
Бывалый
Offline
Сообщений: 451
Re: Зона курсора
«
Ответ #4 :
Февраля 12, 2014, 10:43 »
Что значит "просто так не получить"? Если виджет имеет своим предком QWidget, то надо ставить отслеживание движения мыши, т.к. по-умолчанию оно запрещено и включается только при зажатой кнопке.
Код
C++ (Qt)
setMouseTracking
(
true
)
;
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Зона курсора
«
Ответ #5 :
Февраля 12, 2014, 10:51 »
Цитата: Hellraiser от Февраля 12, 2014, 10:43
Что значит "просто так не получить"? Если виджет имеет своим предком QWidget, то надо ставить отслеживание движения мыши, т.к. по-умолчанию оно запрещено и включается только при зажатой кнопке.
Код
C++ (Qt)
setMouseTracking
(
true
)
;
А не дороговато ли такое решение? И что если др виджет(ы) имеют подобные "зоны курсора"?
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Зона курсора
«
Ответ #6 :
Февраля 12, 2014, 10:55 »
Цитата: Old от Февраля 12, 2014, 10:16
Сделать из линии виджет.
И чем это поможет, если линия не под прямым углом?
Цитата: Igors от Февраля 12, 2014, 10:51
Цитата: Hellraiser от Февраля 12, 2014, 10:43
Что значит "просто так не получить"? Если виджет имеет своим предком QWidget, то надо ставить отслеживание движения мыши, т.к. по-умолчанию оно запрещено и включается только при зажатой кнопке.
Код
C++ (Qt)
setMouseTracking
(
true
)
;
А не дороговато ли такое решение?
Странный вопрос, коли потребовалась такая фича. За всё нужно платить.
Цитировать
И что если др виджет(ы) имеют подобные "зоны курсора"?
И?
Записан
Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
Re: Зона курсора
«
Ответ #7 :
Февраля 12, 2014, 10:58 »
Если сделать линию виджетом и задать ей setTracking + в получаемом евенте MouseMove проверять вхождение в область линии, то вполне можно устанавливать и сбрасывать курсор на нужный.
PS попробую
Интересно же.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Зона курсора
«
Ответ #8 :
Февраля 12, 2014, 11:02 »
Цитата: Bepec от Февраля 12, 2014, 10:58
Если сделать линию виджетом и задать ей setTracking + в получаемом евенте MouseMove проверять вхождение в область линии, то вполне можно устанавливать и сбрасывать курсор на нужный.
А если линия не в отдельном виджете, то уже и нельзя?
Записан
Qt 5.11/4.8.7 (X11/Win)
_OLEGator_
Гость
Re: Зона курсора
«
Ответ #9 :
Февраля 12, 2014, 11:07 »
Помню такое извращение было реализовано в движке карт от КБ Панорама под Qt, где каждый объект карты - отдельный виджет.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Зона курсора
«
Ответ #10 :
Февраля 12, 2014, 11:12 »
Цитата: GreatSnake от Февраля 12, 2014, 10:55
И чем это поможет, если линия не под прямым углом?
В данном случае под прямым, но в целом - очень веский аргумент, "делать виджет" мало того что дорого, так еще и не работает в общем случае
Цитата: GreatSnake от Февраля 12, 2014, 10:55
Странный вопрос, коли потребовалась такая фича. За всё нужно платить.
Да, но как заплатить меньше?
Судя по исходникам setMouseTracking "один на всех", значит это тоже не выход.
Записан
Hellraiser
Бывалый
Offline
Сообщений: 451
Re: Зона курсора
«
Ответ #11 :
Февраля 12, 2014, 11:18 »
А что мешает установить трекинг только для какого-то конкретного виджета?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Зона курсора
«
Ответ #12 :
Февраля 12, 2014, 11:35 »
Цитата: Igors от Февраля 12, 2014, 11:12
Судя по исходникам setMouseTracking "один на всех", значит это тоже не выход.
Проверил - нет, сколько угодно виджетов могут иметь tracking = true и mouseMove (с отжатым мышем) приходит только когда курсор над виджетом. Все-таки наверное mouseMove
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Зона курсора
«
Ответ #13 :
Февраля 12, 2014, 12:48 »
В догонку насчёт о дороговизне setMouseTracking(true)...
Не знаю как в других системах, а в X11 на каждом окне, созданном Qt
всегда
выставляется маска PointerMotionMask независимо от setMouseTracking().
Т.е. задаётся mouseTracking или нет, Qt-приложение
всегда
будет возбуждаться от движения курсором над его окном
Записан
Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Зона курсора
«
Ответ #14 :
Февраля 12, 2014, 12:56 »
В OSX оно тоже всегда приходит и через notify (или фильтры) его можно отловить независимо от установки tracking. Просто хотелось бы "задать зону" (ну или callback) вместо наращивания mouseMoveEvent. По аналогии напр с тултипами. Ну ладно, нет так нет, переживу с mouseMove
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...