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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsScene выделение items [решено]  (Прочитано 7690 раз)
daimon
Гость
« : Ноябрь 28, 2011, 20:08 »

Как изменить вид выделения элементов сцены с пунктирного лассо на затемнение?
« Последнее редактирование: Ноябрь 30, 2011, 23:33 от daimon » Записан
iroln
Гость
« Ответ #1 : Ноябрь 28, 2011, 20:14 »

Переопределить метод paint в классе графического элемента и рисовать как захочется.

Код
Python
def paint(self, painter, style_options, widget=0):
       if style_options.state & QStyle.State_Selected:
           # Рисуем при выделении как хотим, например, затемняем
           #...
 
« Последнее редактирование: Ноябрь 28, 2011, 20:18 от iroln » Записан
daimon
Гость
« Ответ #2 : Ноябрь 28, 2011, 20:18 »

Переопределить метод paint в классе графического элемента и рисовать как захочется.

да нокак быть тогда со стандартным решение выделения итема?

ведь флаг на выделение стоит
Записан
iroln
Гость
« Ответ #3 : Ноябрь 28, 2011, 20:19 »

daimon, не пускать событие дальше.

У меня вот так было сделано:
Код
Python
def paint(self, painter, style_options, widget=0):
 
       if style_options.state & QStyle.State_Selected:
           # Настраиваем отображение элемента при его выделении мышкой
           pen = self.pen()
           brush = self.brush()
 
           color = pen.color()
           color.setAlphaF(self._selection_background_alpha)
 
           brush.setStyle(Qt.SolidPattern)
           brush.setColor(color)
 
           painter.setPen(pen)
           painter.setBrush(brush)
           painter.drawRect(self.boundingRect())
       else:
           super(ImageRectItem, self).paint(painter, style_options, widget)
       pass
 
« Последнее редактирование: Ноябрь 28, 2011, 20:21 от iroln » Записан
daimon
Гость
« Ответ #4 : Ноябрь 28, 2011, 20:23 »

daimon, не пускать событие дальше.

я имею в виду, что может есть та самая функция, которая и рисует лассо и может её надо как-то перерисовать.
Смотрю пример Qt, связанный с рисование диаграмм, там вообще для итема нет функции paint

только так рисуется элемент 

Код
C++ (Qt)
DiagramItem::DiagramItem(DiagramType diagramType, QMenu *contextMenu,
            QGraphicsItem *parent, QGraphicsScene *scene)
   : QGraphicsPolygonItem(parent, scene)
{
   myDiagramType = diagramType;
   myContextMenu = contextMenu;
 
   QPainterPath path;
   switch (myDiagramType) {
       case StartEnd:
           path.moveTo(200, 50);
           path.arcTo(150, 0, 50, 50, 0, 90);
           path.arcTo(50, 0, 50, 50, 90, 90);
           path.arcTo(50, 50, 50, 50, 180, 90);
           path.arcTo(150, 50, 50, 50, 270, 90);
           path.lineTo(200, 25);
           myPolygon = path.toFillPolygon();
           break;
       case Conditional:
           myPolygon << QPointF(-100, 0) << QPointF(0, 100)
                     << QPointF(100, 0) << QPointF(0, -100)
                     << QPointF(-100, 0);
           break;
       case Step:
           myPolygon << QPointF(-100, -100) << QPointF(100, -100)
                     << QPointF(100, 100) << QPointF(-100, 100)
                     << QPointF(-100, -100);
           break;
       default:
           myPolygon << QPointF(-120, -80) << QPointF(-70, 80)
                     << QPointF(120, 80) << QPointF(70, -80)
                     << QPointF(-120, -80);
           break;
   }
   setPolygon(myPolygon);
   setFlag(QGraphicsItem::ItemIsMovable, true);
  setFlag(QGraphicsItem::ItemIsSelectable, true);
   setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
}
Записан
iroln
Гость
« Ответ #5 : Ноябрь 28, 2011, 20:32 »

Это не отрисовка, а задание модели полигона, отрисовка всё равно происходит в методе paint. Функция, которая рисует штрих-пунктир скорее всего зарыта где-то в стандартной реализации класса QGraphicsItem и вызывается внутри него в стандартной реализации метода paint. Можно посмотреть в исходники Qt, чтобы сказать точно, как это сделано.
Записан
iroln
Гость
« Ответ #6 : Ноябрь 28, 2011, 20:35 »

О, кстати, может можно сделать это через CSS? Улыбающийся
Записан
daimon
Гость
« Ответ #7 : Ноябрь 28, 2011, 20:38 »

Это не отрисовка, а задание модели полигона, отрисовка всё равно происходит в методе paint. Функция, которая рисует штрих-пунктир скорее всего зарыта где-то в стандартной реализации класса QGraphicsItem и вызывается внутри него в стандартной реализации метода paint. Можно посмотреть в исходники Qt, чтобы сказать точно, как это сделано.

ну как бы то да, я просто хотел показать как идёт иниционализация итема)))
Записан
daimon
Гость
« Ответ #8 : Ноябрь 28, 2011, 20:44 »

хочу эту штуку использовать для проги поиска минимального пути в графе, при редактировании матрицы весов должны подсвечиваться узлы, самый простой вариант просто выделять нужные итемы

ха но тут другая проблема появилась как выделить программно итем?

если не ошибаюсь метод setSelected(true);
« Последнее редактирование: Ноябрь 28, 2011, 20:51 от daimon » Записан
daimon
Гость
« Ответ #9 : Ноябрь 28, 2011, 20:54 »

О, кстати, может можно сделать это через CSS? Улыбающийся

вот это вообще круто, я как-то один раз так настроил сплиттер, что при фокусе менялся градиент на нём
Записан
iroln
Гость
« Ответ #10 : Ноябрь 28, 2011, 21:45 »

Цитировать
хочу эту штуку использовать для проги поиска минимального пути в графе, при редактировании матрицы весов должны подсвечиваться узлы, самый простой вариант просто выделять нужные итемы
Делал я когда-то подобную программку. Улыбающийся Проще всего изменять вид элементов - это менять их цвет/альфу через методы элемента (setPen/setBrush).

Программно выделять через setSelected(true).
А через CSS, да, было бы классно настраивать вид элементов, но я не знаю как это делать. Как-то не приходилось.
« Последнее редактирование: Ноябрь 28, 2011, 21:47 от iroln » Записан
daimon
Гость
« Ответ #11 : Ноябрь 29, 2011, 16:17 »

Для это надо разработать систему энамов, чтобы потом в paint их отлавливать и подсвечивать итем
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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