Введение в разработку приложений на платформе Atom/MeeGo. Граничин О.Н - 118 стр.

UptoLike

118
tilePixmap.fill(Qt::white);
QPainter tilePainter(&tilePixmap);
QColor color(220, 220, 220);
QImage *meego_img =
new QImage(":/files/images/meego_logo.jpeg");
tilePainter.drawImage(0,10,
meego_img->scaled(QSize(64,32),Qt::KeepAspectRatio));
tilePainter.end();
break;
}
}
setBackgroundBrush(tilePixmap);
}
Здесь в каждом случае мы рисуем на тайлах (повторяющихся изображениях), размером 64x64
пикселей. Вызов метода fill c параметром Qt::white очищает подложку. Вызов конструктора
QPainter tilePainter(&tilePixmap) позволяет создать новый объект, который осуществляет рисование
на тайле. Метод fillRect заливают указанный прямоугольник; drawImageрисует заданное
изображение. Вызов метода end применяет изменения.
В следующей функции инициируется рисование подложки:
void SvgView::drawBackground(QPainter *p)
{
p->save();
p->resetTransform();
p->drawTiledPixmap(viewport()->rect(), backgroundBrush().texture());
p->restore();
}
Далее описываются слоты, которые позволяют пользователю установить окантовку и подложку
для svg-файла.
void SvgView::setViewBackground(bool enable)
{
if (!m_backgroundItem)
return;
m_backgroundItem->setVisible(enable);
}
void SvgView::setViewOutline(bool enable)
{
if (!m_outlineItem)
return;
m_outlineItem->setVisible(enable);
}
И наконец, опишем метод openFile, в котором осуществляется вывод svg-графики из указанного
файла:
void SvgView::openFile(const QFile &file)
{
if (!file.exists())
return;
QGraphicsScene *s = scene();
bool drawBackground = (m_backgroundItem ? m_backgroundItem->isVisible()
: false);
bool drawOutline = (m_outlineItem ? m_outlineItem->isVisible() : true);