[Qt] Как принято рисовать?
От: Sheridan Россия  
Дата: 04.12.09 22:18
Оценка:
Приветствую!
Пытаюсь рисовать... QGraphicsScene, QGraphicsView и несколько QGraphicsItem, унаследованные от общего родителя
Рисую в QGraphicsItem::paint(...) — заметные тормоза.
Родитель:
void CGraphicsItem::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);
    painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::HighQualityAntialiasing, true);
    #ifndef QT_NO_DEBUG
        painter->setPen(QPen(QBrush(QColor("firebrick")), 1, Qt::DashLine));
        painter->drawRect(boundingRect());
    #endif
    painter->setPen(_stdPen);
    painter->setBrush(_stdBrush);
    painter->setFont(_stdFont);
    paint(painter);
}

Один из потомков (самый ресурсоемкий)
void CSattelitesBackground::paint(QPainter * painter)
{

    // circles
    for(int i = 90; i >= 10; i -= 10)
    {
        _circleGradient.setRadius(scale(i));
        painter->setBrush(QBrush(_circleGradient));
        painter->drawEllipse(getCircle(0,0,scale(i)));
    }
    painter->setBrush(_stdBrush);

    // lines
    for(int i = 0; i < 360; i+=__lineAnglesStep)
    {
        painter->drawLine(getLine(scale(5),i,scale(95),i));
    }

    //text
    painter->setFont(_elevationFont);
    for(int i = 90; i >= 10; i -= 10)
    {
        for(int j = 0; j < 360; j+=__lineAnglesStep)
        {
            painter->drawText(QRectF(scale(1), -scale(i), scale(8), scale(5)), Qt::AlignLeft, QString("%1").arg(90 - i));
            painter->rotate(__lineAnglesStep);
        }
    }
    painter->setFont(_azimuthFont);
    for(int i = 0; i < 360; i+=__lineAnglesStep)
    {
        painter->drawText(QRectF(scale(1), -scale(98), scale(20), scale(8)), Qt::AlignLeft, QString("%1%2").arg(i).arg(QChar(176)));
        painter->rotate(__lineAnglesStep);
    }
    painter->setFont(_wSidesFont);
    painter->drawText(QRectF(-scale(15), -scale(110), scale(30), scale(10)), Qt::AlignCenter, QObject::tr("North"));
    painter->rotate(90);
    painter->drawText(QRectF(-scale(15), -scale(110), scale(30), scale(10)), Qt::AlignCenter, QObject::tr("East"));
    painter->rotate(90);
    painter->drawText(QRectF(-scale(15), -scale(110), scale(30), scale(10)), Qt::AlignCenter, QObject::tr("South"));
    painter->rotate(90);
    painter->drawText(QRectF(-scale(15), -scale(110), scale(30), scale(10)), Qt::AlignCenter, QObject::tr("West"));
    painter->rotate(90);

}

Что я делаю не так? Как можно по другому?
avalon 1.0rc3 rev 306, zlib 1.2.3 (02.12.2009 18:36:32 MSK +03:00)(Qt 4.6.0)

21.01.10 02:05: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Matrix has you...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.