Приветствую!
Пытаюсь рисовать... 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);
}
Что я делаю не так? Как можно по другому?
21.01.10 02:05: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт