Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Иволга от Ноябрь 18, 2015, 18:47



Название: QGraphicsScene - выделение объектов
Отправлено: Иволга от Ноябрь 18, 2015, 18:47
Я располагаю на сцене объекты QGraphicsPathItem. Как спрятать стандартную рамку при выделении этих объектов (я использую свою в виде QGraphicsRectItem)?


Название: Re: QGraphicsScene - выделение объектов
Отправлено: GreatSnake от Ноябрь 18, 2015, 19:02
Либо не рисовать её либо не выставлять QGraphicsItem::ItemIsSelectable флаг.


Название: Re: QGraphicsScene - выделение объектов
Отправлено: Иволга от Ноябрь 18, 2015, 19:04
Я не о том немного. Мне надо выделять объекты моей рамкой, а вот стандартная мне не нужна. Как сделать, чтобы она не появлялась? Чтобы появлялась только моя.


Название: Re: QGraphicsScene - выделение объектов
Отправлено: GreatSnake от Ноябрь 18, 2015, 19:06
Я не о том немного. Мне надо выделять объекты моей рамкой, а вот стандартная мне не нужна. Как сделать, чтобы она не появлялась? Чтобы появлялась только моя.
Что значит "моя рамка"? Кем она отрисовывается?


Название: Re: QGraphicsScene - выделение объектов
Отправлено: Иволга от Ноябрь 18, 2015, 19:10
Как QGraphicsRectItem (в первом сообщении написано). Она привязана к объекту через некий класс, и когда объект выбирается. она становится видимой. Но при этом и стандартная рамка появляется, а она мне не нужна.


Название: Re: QGraphicsScene - выделение объектов
Отправлено: GreatSnake от Ноябрь 18, 2015, 19:13
Не вижу ответа на вопрос "Кем она отрисовывается?"


Название: Re: QGraphicsScene - выделение объектов
Отправлено: Иволга от Ноябрь 18, 2015, 19:16
Она отрисована мной при создании основного объекта, а затем спрятана. Когда сцена порождает сигнал selectionChanged(), я проверяю все объекты, показываю рамки у тех, что выделены (isSelected() = true) и прячу у остальных.


Название: Re: QGraphicsScene - выделение объектов
Отправлено: GreatSnake от Ноябрь 18, 2015, 19:18
Код
C++ (Qt)
void YourGraphicsPathItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget )
{
QStyleOptionGraphicsItem o = *option;
o.state &= ~QStyle::State_Selected;
QGraphicsPathItem::paint( painter, &o, widget );
}
 


Название: Re: QGraphicsScene - выделение объектов
Отправлено: Иволга от Ноябрь 18, 2015, 19:21
Спасибо. Завтра попробую применить.


Название: Re: QGraphicsScene - выделение объектов
Отправлено: AzazelloAV от Ноябрь 18, 2015, 20:03
Я не о том немного. Мне надо выделять объекты моей рамкой, а вот стандартная мне не нужна. Как сделать, чтобы она не появлялась? Чтобы появлялась только моя.

Не помню точно где и как, если надо, подыщу. Прорисовка осуществляется в функции qt_graphicsItem_highlightSelected()
Я делал так. Перед вызовом данной функции удалял флаг прорисовки селекта, затем восстанавливал а рамку  отрисовывал в drawForeground. Не привязаны к итему,  можно всякие стрелочки рисовать вне итема и т.д.,  а также групповой селект общей рамкой, а не каждая выделенная.

P.S. Может найдёте полезное http://www.prog.org.ru/topic_28597_0.html


Название: Re: QGraphicsScene - выделение объектов
Отправлено: Иволга от Ноябрь 19, 2015, 10:10
А как правильно наследника в сцену добавлять? Метод QGraphicsScene::addPath создаёт экземпляр базового класса, и перегруженный метод paint для него не вызывается.


Название: Re: QGraphicsScene - выделение объектов
Отправлено: GreatSnake от Ноябрь 19, 2015, 11:07
Хм.. странный вопрос...

Код
C++ (Qt)
scene->addItem( new YourGraphicsPathItem() );


Название: Re: QGraphicsScene - выделение объектов
Отправлено: Иволга от Ноябрь 19, 2015, 15:43
Получилось. ;D