Qt QGraphicsSvgItem缩放和调整大小

时间:2016-05-09 11:18:02

标签: c++ qt svg

我在QGraphicsSvgItem之后创建了类,并将其命名为MyObject。我希望将图标分配给它,但同时 - 我希望能够重新缩放它,以便我可以使用一个图标来呈现不同的对象(例如,Door-Icon.svg用于呈现小门和大门)。现在有一个问题 - 没有选项从.svg本身重新缩放图像。我尝试使用qPixmap,但它给了我pixeleted iamges。

  class MyObject : public QGraphicsSvgItem
  {
      void assign_Icon(QString Path);
      void rescale_Icon(QString Path);
      int Widith;
      int Height;
        // ...
  }

和functon:

  void MyObject::assign_Icon(QString Path)
  {
      QSvgRenderer *renderer = new QSvgRenderer(Path);
      this->setSharedRenderer(renderer);
      Widith =  this->renderer()->defaultSize().width();
      Height =  this->renderer()->defaultSize().height();
  }

它只能以.svg的基本大小呈现。但是我无法找到“如何”我可以将.svg图标调整为对象当前宽度和高度。

  void MyObject::rescale_Icon(QString Path)
  {
      QSvgRenderer *renderer = new QSvgRenderer(Path);
      this->setSharedRenderer(renderer);
      // But what to do here?
  }

2 个答案:

答案 0 :(得分:2)

解决它:

    QRectF MyObject::boundingRect() const
    {
        return QRectF(0,0,Widith,Height);
    }

    void MyObject::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *widget)
    {
        this->renderer()->render(painter, boundingRect());
    }

答案 1 :(得分:1)

void GraphicsColorSvgItem::paint(QPainter* painter,
                             const QStyleOptionGraphicsItem*option,
                             QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    _renderer.load(initFileSvg().toUtf8());

    painter->setRenderHint(QPainter::Antialiasing, true);
    painter->fillPath(shape(), Qt::NoBrush);

    //Start draw SVG file and set Rect
    _renderer.render(painter,QRect(0,
                               0,
                               getItemSize().width(),
                               getItemSize().height()));
    _fileSvg.close();
    painter->setRenderHint(QPainter::Antialiasing, false);
}
QString GraphicsColorSvgItem::initFileSvg()
{
    _fileSvg.setFileName(getFileName());
    _fileSvg.open(QIODevice::ReadOnly | QIODevice::Text);
    _str.setDevice(&_fileSvg);
    _content = _str.readAll();

    return _content;
}

创建此类的对象     GraphicsColorSvgItem itemSVG = new GraphicsColorSvgItem; 和规模需求:     itemSVG-> setScale(scale_value);