Russian Qt Forum
Ноябрь 23, 2024, 20:20
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Зона курсора
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Зона курсора (Прочитано 7729 раз)
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...