crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QGraphicsItem кривые безье
lpenguin
  опции профиля:
сообщение 26.11.2010, 18:53
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 26.11.2010
Пользователь №: 2223

Спасибо сказали: 0 раз(а)




Репутация:   0  


Пытаюсь сейчас в Qt отрисовать граф, соотвественно, если между двумя вершинами есть больше чем 2 (или больше) ребра,
я рисую их с помощью метода QPainterPath.cubicTo как кривые, чтобы их "раздвинуть". Примерно так:


Проблема вот в чем - ребра это классы, унаследованные от QGraphicsItem, и нужно чтобы при наведении на одно из ребер оно подсвечивалось. Переопределил paint (в нем с помощью QPainterPath отрисовывается кривая) , boundingRect (это границы того QPainterPath ) и shape( возвращает QPainterPath) - однако если с одной стороны ребер больше чем два, то выделяется все время только одно, которое больше отстоит от вершин. На картинке подсвечивается либо верхнее, либо нижнее например. Вроде все довольно просто, однако как-будто ребра перекрывают одно другое. =(

вот код paint:
Раскрывающийся текст
void EdgeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{

    if (option->state.testFlag(QStyle::State_HasFocus) )
     {
        painter->setBrush(QColor(255, 255, 190));

     }
     else if (option->state.testFlag(QStyle::State_MouseOver))
     {
         painter->setPen(QPen(m_color, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
     }
     else
     {
         painter->setPen(QPen(m_color, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
     }
    painter->setRenderHint(QPainter::Antialiasing );
    painter->drawPath( m_path );
}


shape:
QPainterPath EdgeItem::shape () const{
    return m_path;
}


boundingRect
QRectF EdgeItem::boundingRect() const
{
        return m_path.boundingRect();
}


может кто-нибудь подсказать в чем дело?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 6:19