crossplatform.ru

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

> QGraphicsItem QGraphicsScene Остаются следы после перемещения или изменения итемов
transserg
  опции профиля:
сообщение 24.1.2011, 13:57
Сообщение #1


Новичок


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

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




Репутация:   0  


Добрый день. Столкнулся с проблемой. при изменения QGraphicsItem остаются следы на QGraphicsScene от старого изображения как от этого избавиться?
Раскрывающийся текст
boundingRect
QRectF Element::boundingRect() const
{

    qreal  ymin = 65535;
    qreal  ymax = 0;
    qreal  xmin = 65535;
    qreal  xmax = 0;

    foreach (QPointF it, points)
    {
        if ( it.y() > ymax )
            ymax = it.y();

        if ( ymin > it.y() )
            ymin = it.y();

        if ( it.x() > xmax )
            xmax = it.x();

        if ( xmin > it.x() )
            xmin = it.x();
    }


    return QRectF( QPointF( xmin - 30, ymin - 30 ), QPointF( xmax + 30, ymax + 30 ) );

}


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

    switch ( elementType )
    {
    case ElementAngle:
    case ElementArrow:

        FillPolygon::fillpolygon(painter,points,FillColor);
        painter->setPen(QPen(LineColor,2,Qt::SolidLine));
        painter->drawPolygon(points.toVector());

        if ( selected )
        {
            painter->setPen(QPen(Qt::red,2,Qt::DotLine));
            painter->drawPolygon(points.toVector());
        }
        switch(transformType)
        {
        case Spin:
            break;
        case SPc:
            painter->setPen(QPen(Qt::red,2,Qt::DotLine));
            painter->drawEllipse( Center,5,5);
            break;
        case SH:
            painter->setPen(QPen(Qt::red,2,Qt::DotLine));
            painter->drawLine(horizontal);
            break;
        case nonTransform:
            break;
        }

        break;
    case ElementErmitSpline:

        ErmitSpline::drawSqrSpline( painter, points, LineColor, selected );

        break;
    case ElementNone:

        break;
    }
}

Раскрывающийся текст
    setFlag(QGraphicsItem::ItemIsMovable, true);
    setFlag(QGraphicsItem::ItemIsSelectable, true);
    setFlag(QGraphicsItem::ItemIsFocusable, true);
    setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);


поторопился. решился вопрос вызовом prepareGeometryChange(); перед изменением содержимого итема.

поторопился. решился вопрос вызовом prepareGeometryChange(); перед изменением содержимого итема.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 1)
Obey-Kun
  опции профиля:
сообщение 24.1.2011, 14:06
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

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




Репутация:   0  


надо делать prepareGeometryChange() при изменении геометрии, причём при этом не надо делать update(), всё будет делаться само.
ну или надо делать update() если изменении не приводит к изменению геометрии
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 17:17