Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Yegor от Апрель 30, 2014, 15:53



Название: QGraphicsView - запомнить а потом воспроизвести графику
Отправлено: Yegor от Апрель 30, 2014, 15:53
    Здравствуйте, дорогие форумчане!

    Использую Qt 4.8.2
    Подскажите, пожалуйста, про использование класса QPainter.

    У меня есть класс GraphItem, унаследованный от QGraphicsItem.
    В его переопределенном виртуальном методе для рисования я рисую свою графику:

Код:
GraphItem::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget )
{
    //Рисую своим объектом.
    pClock->draw(painter);
}

    Причем эту свою графику я выполняю с помощью своего класса, указатель на который - pClock
То есть в свой объект я передаю указатель для рисования - painter (это параметр из метода GraphItem::paint), а мой объект далее все рисует уже сам.

    Но вот только я хочу, чтобы при первом рисовании (при первом вызове GraphItem::paint), сначала рисовалось все моим объектом. А при следующих вызовах GraphItem::paint все то же самое рисовалось уже без моего объекта. То есть чтобы мой объект сначала только один первый раз нарисовал, далее чтобы из QPainter вся эта информация куда либо запомнилась, а затем воспроизводилась. Воспроизводилась сама, без моего объекта.

    Чтобы код выглядел похоже на этот фрагмент:

Код:
GraphItem::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget )
{
    //Флаг о состоянии инициализации.
    static bool IsInited = FALSE;

    //Рисую своим объектом. Только первый раз.
    if(!IsInited)
    {
        pClock->draw(painter); //Нарисовать своим.
        IsInited = TRUE; //Уже нарисовал.

        //Как то запомнить графическую информацию из готового (прорисованного QPainter).
        ...
    }

    //Иначе объект был уже нарисован. Воспроизвести сохраненное.
    else
    {
        //Как то воспроизвести записанное изображение.
        ...
    }
}

В общем задача в том, чтобы нарисованное изображение сохранить куда либо в QPainter, а затем воспроизвести. И чтобы это работало в методе GraphItem::paint. Подскажите, пожалуйста, как это сделать?


Название: Re: QGraphicsView - запомнить а потом воспроизвести графику
Отправлено: xokc от Апрель 30, 2014, 17:22
Как то сумбурно. Нарисуйте свою графику в pixmap соответствующего размера, а в paintEvent просто рисуйте сгенерированный ранее pixmap.