我在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?
}
答案 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);