我以QGraphicsSvgItem的名字创建了继承的类,并将其命名为MyObject。我希望为它指定一个图标,但同时我希望能够重新设置它,这样我就可以使用一个图标来表示不同的对象(例如,Door-Icon.svg用于显示小门和大门)。现在它有了一个问题--没有办法从*.svg本身恢复图像。我试着和QPixmap一起工作,但是它给了我一些像素。
class MyObject : public QGraphicsSvgItem
{
void assign_Icon(QString Path);
void rescale_Icon(QString Path);
int Widith;
int Height;
// ...
}的职能如下:
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?
}发布于 2016-05-09 13:20:54
以下列方式解决该问题:
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());
}发布于 2016-05-09 12:46:45
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 =新的GraphicsColorSvgItem;和规模需要: itemSVG->setScale(scale_value);
https://stackoverflow.com/questions/37114430
复制相似问题