//绘制SVG图形:
SvgView::SvgView(const QString &file, QWidget *parent)
: QWidget(parent)
{
doc = new QSvgRenderer(file, this); //QSvgRenderer将SVG图形绘制到绘图设备上
connect(doc, SIGNAL(repaintNeeded()), //文档需要更新时发出,通常用来实现动画效果
this, SLOT(update()));
}
void SvgView::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.setViewport(0, 0, width(), height());
doc->render(&p);
}
QSize SvgView::sizeHint() const
{
if (doc)
return doc->defaultSize();
return QWidget::sizeHint();
}
void SvgView::wheelEvent(QWheelEvent *e)
{
const double diff = 0.1;
QSize size = doc->defaultSize();
int width = size.width();
int height = size.height();
if (e->delta() > 0) { //此函数已废弃,用pixelDelta() / angleDelta() instead.
width = int(this->width()+this->width()*diff);
height = int(this->height()+this->height()*diff);
} else {
width = int(this->width()-this->width()*diff);
height = int(this->height()-this->height()*diff);
}
resize(width, height);
}
// void MyWidget::wheelEvent(QWheelEvent *event)
// {
// QPoint numPixels = event->pixelDelta();
// QPoint numDegrees = event->angleDelta() / 8;
// if (!numPixels.isNull()) {
// scrollWithPixels(numPixels);
// } else if (!numDegrees.isNull()) {
// QPoint numSteps = numDegrees / 15;
// scrollWithDegrees(numSteps);
// }
// event->accept();
// }
//生成SVG图形:
#include <QApplication>
#include <QtGui>
#include <QtSvg>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSvgGenerator svgGen;
svgGen.setFileName("test.svg");
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
QPainter painter;
painter.begin(&svgGen);
QPen pen(Qt::red);
painter.setPen(pen);
painter.drawEllipse(rectangle);
rectangle.moveRight(100);
painter.drawRect(rectangle);
rectangle.moveRight(100);
QRectF source(0.0, 0.0, 70.0, 40.0);
QImage image("Greenstone.bmp");
painter.drawImage(rectangle, image, source);
painter.end();
return 0;
}