Russian Qt Forum
Ноябрь 24, 2024, 21:35
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Мини-навигатор
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Мини-навигатор (Прочитано 8164 раз)
Khs
Гость
Мини-навигатор
«
:
Март 19, 2009, 13:36 »
Привет!
Имеется
: QGraphicsView/Scene с неким содержимым.
Необходимо
: Сделать мини-навигатор для имеющейся QGraphicsView, (обычно такие делаются в мап-сервисах), тоесть в QGraphicsView идет отображение участка карты попадающего в область просмотра, а в мини-навигаторе отображена вся карта и прямоугольник, показывающий область просмотра в QGraphicsView. При этом при нажатии на мини-навигатор, айтемы сцены двигаться не должны, и область просмотра QGraphicsView должна перемещаться в точку нажатия в навигаторе и, соответственно прямоугольник на навигаторе тоже.
По сути, этот мини-навигатор также можно реализовать через QGraphicsView привязанный к этой сцене. Только тут есть некоторые вопросы.
Если делать setInteractive(false) у навигатора ("any mouse or key events are ignored", чтобы нельзя было двигать айтемы), как потом получать события мыши для сдвига области в навигаторе.
Как лучше сделать взаимосвязь для отрисовки прямоугольника в навигаторе.
Спасибо!
Записан
_OLEGator_
Гость
Re: Мини-навигатор
«
Ответ #1 :
Март 19, 2009, 19:23 »
Наследуй QGraphicsView
1) Для отрисовки видимой области переопредели QGraphicsView::drawForeground ( QPainter * painter, const QRectF & rect )
2) При нажатии на навигаторе пересчитывать координаты и вызвать у карты QGraphicsView::centerOn ( const QPointF & pos )
3) Чтобы не давать двигать элементы сцены надо заблокировать события мыши у своего навигатора, вроде бы так...
придется связывать свой навигатор и карту, чтобы ловить изменение размеров и перемещений.
Записан
Khs
Гость
Re: Мини-навигатор
«
Ответ #2 :
Март 20, 2009, 13:53 »
Цитата: _OLEGator_ от Март 19, 2009, 19:23
Наследуй QGraphicsView
1) Для отрисовки видимой области переопредели QGraphicsView::drawForeground ( QPainter * painter, const QRectF & rect )
2) При нажатии на навигаторе пересчитывать координаты и вызвать у карты QGraphicsView::centerOn ( const QPointF & pos )
3) Чтобы не давать двигать элементы сцены надо заблокировать события мыши у своего навигатора, вроде бы так...
придется связывать свой навигатор и карту, чтобы ловить изменение размеров и перемещений.
2 и 3 сделал, а вот с 1м есть вопросец. Отрисовываю в
drawForeground
прямоугольник нормально, тоесть он соответствует области
QGraphicsView
основного. Я так понимаю
drawForeground
происходит при вызове
viewport()->update()
или я ошибаюсь? Тоесть когда делаешь ресайз виджета на котором находится навигатор, то происходит вызов
drawForeground
и прямоугольник перерисовывается с новыми позициями
QGraphicsView
, а как сделать вызов перерисовки при прокрутке скроллов
QGraphicsView
? Переопределять наследованные ф-и от
QAbstractScrollArea
и там вызывать
viewport()->update()
навигатора?
Записан
xaaw
Гость
Re: Мини-навигатор
«
Ответ #3 :
Март 23, 2009, 22:18 »
Взаимосвязь между навигатором и основным QGraphicsView лучше делать через setSceneRect()
а foreground переопределить так чтобы он отрисовывал sceneRect.Таким образом при изменении sceneRect будет происходить перерисовка как в основном окне так и в навигаторе.
A скролы необходимо будет привязать к sceneRect();
Записан
Khs
Гость
Re: Мини-навигатор
«
Ответ #4 :
Март 23, 2009, 22:46 »
неа, через сцену не совсем правильно это делать, точнее вообще не в ту степь. Решил вопрос, если что потом выложу
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Мини-навигатор
«
Ответ #5 :
Март 24, 2009, 12:45 »
Сам как-то делал подобное, правда, навигатор у меня был отдельным виджетом с собственной отрисовкой.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Khs
Гость
Re: Мини-навигатор
«
Ответ #6 :
Март 25, 2009, 12:36 »
Вот, то, что получилось))
Записан
spirit
Гость
Re: Мини-навигатор
«
Ответ #7 :
Март 25, 2009, 12:39 »
куль!
Записан
AntonUfo
Гость
Re: Мини-навигатор
«
Ответ #8 :
Февраль 01, 2010, 12:09 »
Цитата: log1c от Март 25, 2009, 12:36
Вот, то, что получилось))
Если делать не через сцену то как правильно, ков механизм ?
Записан
mal
Гость
Re: Мини-навигатор
«
Ответ #9 :
Февраль 08, 2010, 17:28 »
делал такое - две сцены - два вью и никаких проблем с блокировкой айтемов
Записан
AntonUfo
Гость
Re: Мини-навигатор
«
Ответ #10 :
Февраль 08, 2010, 21:12 »
да я то же уже сделал, одна сцена два вью.. + стгналы и слоты... в общем через одно место походу... вроде работает.... но чувствую что можно было как то более прямее что ли..., вообще у меня проблема какая то прога все больше, все серьезней но както запутанно все более и более получается, нет культуры программирования что ли....
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...