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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsScene - выделение объектов  (Прочитано 9703 раз)
Иволга
Чайник
*
Offline Offline

Сообщений: 58



Просмотр профиля
« : Ноябрь 18, 2015, 18:47 »

Я располагаю на сцене объекты QGraphicsPathItem. Как спрятать стандартную рамку при выделении этих объектов (я использую свою в виде QGraphicsRectItem)?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Ноябрь 18, 2015, 19:02 »

Либо не рисовать её либо не выставлять QGraphicsItem::ItemIsSelectable флаг.
Записан

Qt 5.11/4.8.7 (X11/Win)
Иволга
Чайник
*
Offline Offline

Сообщений: 58



Просмотр профиля
« Ответ #2 : Ноябрь 18, 2015, 19:04 »

Я не о том немного. Мне надо выделять объекты моей рамкой, а вот стандартная мне не нужна. Как сделать, чтобы она не появлялась? Чтобы появлялась только моя.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Ноябрь 18, 2015, 19:06 »

Я не о том немного. Мне надо выделять объекты моей рамкой, а вот стандартная мне не нужна. Как сделать, чтобы она не появлялась? Чтобы появлялась только моя.
Что значит "моя рамка"? Кем она отрисовывается?
Записан

Qt 5.11/4.8.7 (X11/Win)
Иволга
Чайник
*
Offline Offline

Сообщений: 58



Просмотр профиля
« Ответ #4 : Ноябрь 18, 2015, 19:10 »

Как QGraphicsRectItem (в первом сообщении написано). Она привязана к объекту через некий класс, и когда объект выбирается. она становится видимой. Но при этом и стандартная рамка появляется, а она мне не нужна.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Ноябрь 18, 2015, 19:13 »

Не вижу ответа на вопрос "Кем она отрисовывается?"
Записан

Qt 5.11/4.8.7 (X11/Win)
Иволга
Чайник
*
Offline Offline

Сообщений: 58



Просмотр профиля
« Ответ #6 : Ноябрь 18, 2015, 19:16 »

Она отрисована мной при создании основного объекта, а затем спрятана. Когда сцена порождает сигнал selectionChanged(), я проверяю все объекты, показываю рамки у тех, что выделены (isSelected() = true) и прячу у остальных.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Ноябрь 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 );
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
Иволга
Чайник
*
Offline Offline

Сообщений: 58



Просмотр профиля
« Ответ #8 : Ноябрь 18, 2015, 19:21 »

Спасибо. Завтра попробую применить.
Записан
AzazelloAV
Гость
« Ответ #9 : Ноябрь 18, 2015, 20:03 »

Я не о том немного. Мне надо выделять объекты моей рамкой, а вот стандартная мне не нужна. Как сделать, чтобы она не появлялась? Чтобы появлялась только моя.

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

P.S. Может найдёте полезное http://www.prog.org.ru/topic_28597_0.html
« Последнее редактирование: Ноябрь 18, 2015, 20:34 от AzazelloAV » Записан
Иволга
Чайник
*
Offline Offline

Сообщений: 58



Просмотр профиля
« Ответ #10 : Ноябрь 19, 2015, 10:10 »

А как правильно наследника в сцену добавлять? Метод QGraphicsScene::addPath создаёт экземпляр базового класса, и перегруженный метод paint для него не вызывается.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Ноябрь 19, 2015, 11:07 »

Хм.. странный вопрос...

Код
C++ (Qt)
scene->addItem( new YourGraphicsPathItem() );
Записан

Qt 5.11/4.8.7 (X11/Win)
Иволга
Чайник
*
Offline Offline

Сообщений: 58



Просмотр профиля
« Ответ #12 : Ноябрь 19, 2015, 15:43 »

Получилось. Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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