Всем привет.!!! Вопрос такой:
Создаю собственный класс унаследованный от QGraphicsItem, определяю в нем методы:
MyItem::boundingRect(); MyItem::painter (рисую круг), MyItem::mousePressEvent, MyItem::mouseMoveEvent, MyItem::mouseReleaseEvent, разрешаю перетаскивать MyItem мышкой (setFlag(ItemIsMovable);
Создаю собственный класс унаследованный от QGraphicsView, определяю в нем метод:
MyView::mousePressEvent
определяю сцену....
При нажатии кнопки мышки срабытывает MyView::mousePressEvent и отрисовывает в точке соответствующего положения мышки кружочек, (при этом созданный Item записываю в список) можно их нарисовать много и перетаскивать, только понять не могу как сделать так что бы нельзя было рисовать в месте в котором уже кружок нарисован ?, т.е. не допустить наложения двух кружочков на сцене..
Пробовал в методе MyView::mousePressEvent сравнивать текущее положение мышки с положениями Item-ов записанными в список и в зависимости от этого рисовать или не рисовать новый, но к сожалению это не хороший путь в сохраненную точку невозможно попасть....
ЗЫ: прочитал свой вопрос..... если понять что же я хочу трудно, скажите попробую переформулировать...
ЗЫЫ: перерыл всю возможную литературу, ответа не нашел но есть же способ мне бы малинький примерчик.....
Если я тебя правильно понял, то тебе нужно поиграться с регионами, на наличие пересечений...
мне нужно каким то образом делать вот что:
при нажатии на кнопку мышки определять что я нажал не на пустое поле а на кружок, и не рисовать рядом новый, соответственно при нажатии на пустое поле нарисовать кружок...., как рисовать я знаю, как определить что под мышкой находится кружок ?
Тебе в памяти нужно будет держать регионы, или приводить к ним, а затем при клике получив точку клика проверять попал ты в регион или нет, это можно сделать с помощью: http://crossplatform.ru/documentation/qtdoc4.3/qregion.php#contains.
Ну например:
// QList<QRect> rectList, список окружностей
// QRect rect, координаты окружности
bool bEx=false;
foreach( rect, rectList)
{
QRegion region( rect, QRegion::Ellipse);
if( region.contains( point)) // QPoint point, координаты мышки
{
// мы попали в окружность
bEx = true;
break;
}
}
if( !bEx)
{
// Рисуем окружность и прочее
}
надеюсь идея понятна...
а вот с этим уже играться нужно и читать, я пока не заморачивался...
Если уже было решение этой проблемы пожалуйста напишите..
У меня появился вариант решения этой проблемы через mouseHover, только не знаю или он правельный...(
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)