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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Программирование хотспотов на картинки  (Прочитано 8058 раз)
Разуев Максим
Гость
« : Июнь 21, 2007, 03:17 »

Может кто нибудь помочь с созданием хотспотов в Qt. Может кто занимался. А то я никогда не занимался. Пока понял только что надо использовать QGraphicsView. Но не понял как.
Записан
SABROG
Гость
« Ответ #1 : Июнь 21, 2007, 07:44 »

Ты хочешь сделать как здесь ? http://www.htmlcodetutorial.com/images/images_famsupp_220.html
Записан
Разуев Максим
Гость
« Ответ #2 : Июнь 21, 2007, 07:52 »

Примерно.
Только средствами Qt и C++. А не HTML. Мне необходимо дать пользователю задать хотспоты на изображении. А потом обрабатывать нажатия на них.
Записан
SABROG
Гость
« Ответ #3 : Июнь 21, 2007, 08:11 »

Посмотри пример examples\graphicsview\elasticnodes

Там есть круглые точки, которые обрабатывают нажатие мышкой.
Записан
goer
Гость
« Ответ #4 : Июнь 21, 2007, 09:15 »

Graphicsview хорошо, но не всегда. Иногда связка QWidget & mouse...Event() & QPolygon оказывается не только мощнее, но и вообще единственным способом решить задачу.
Записан
Разуев Максим
Гость
« Ответ #5 : Июнь 24, 2007, 20:41 »

Примеры смотрел. Много подчерпнул по QGraphicsView. Но ничего по хотспотам.
Я прошу подсказать пример вообще как это организовать.
Можно кстати и пример по хотспотам и без Qt. Мне хотелось бы увидев основной принцип реализации.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Июнь 24, 2007, 21:53 »

1. Создаешь набор полигонов QPoligon из точек, по полигону для каждого хотспота.
2. В виджете переопределяешь мышыные эвенты, которые будешь юзать (Press, Move, Click...) от задачи зависит.
3. В эвентах проверяешь для каждого полигона попадание в него курсора мыши, через например

bool QPolygon::containsPoint ( const QPoint & pt, Qt::FillRule fillRule ) const

4. С найденным полигоном делаешь то, что тебе нужно.
Записан

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 не волк, в лес не уйдёт
Разуев Максим
Гость
« Ответ #7 : Июнь 25, 2007, 15:01 »

Проблема в задании полигона интерактивно пользователем.
Пользователь должен как то выбрать область на картинке и указать это хотспот. По идее надо как то поверх картинки выводить тот самый QPolygon, мне хватит и QRect. Перемещать его по картинке стрелками и изменять размер например стрелки + Shift.
У меня проблема в том что я никогда не занимался рисованием на форме или в компоненте (Если бы был аналог TCanvas из C++Builder). Я хотел бы выяснить каким образом это можно реализовать. А то я хреново читаю по Английски, и с трудом разбираюсь в help по QGraphicsView.

добавлено спустя 3 часа 37 минут:

 Немного продвинулся. Получаеися вывести прямоугольный контур поверх изображения. Но немогу понять как запретить прямоугольнику выходить за пределы изображения Я добавил QGraphicsRectItem в QGraphicsScene и установил для него флаг isMovable, т.е. прямоугольник свободно перетаскивается мышью. Но при перетаскивании он может вылазить за пределы изображения (setSceneRect я задаю раной размеру изображения, сцена теперь не увеличивается но на прямоугольник это не влияет).

добавлено спустя 7 часов 44 минуты:

 Еще одна проблема. В QGraphicsItem есть функция type(). По идее она должна возвращать тип элемента, в assistent написано что для стандартных элементов она возвращает уникальное значение. Но нигде не указаны эти значения.
Может кто знает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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