リソースにsvgがロードされていますが、黒です。どのように色を白に変更するのですか?限り、あなたは、これは動作するはずです、Mac上でそれを必要としないようqt内のsvgの色を変更する
答えて
これはQtで行うことができます.xtプロジェクト(* .proファイル)にxmlとsvgモジュールを追加することを忘れないでください。このコードスニペットは、 "path"要素の "fill"属性を変更することで色を変更しますが、これを使用して任意の要素の属性を変更することができます。
void SetAttrRecur(QDomElement &elem, QString strtagname, QString strattr, QString strattrval);
void ChangeSVGColor()
{
// open svg resource load contents to qbytearray
QFile file("myfile.svg");
file.open(QIODevice::ReadOnly);
QByteArray baData = file.readAll();
// load svg contents to xml document and edit contents
QDomDocument doc;
doc.setContent(baData);
// recurivelly change color
SetAttrRecur(doc.documentElement(), "path", "fill", "white");
// create svg renderer with edited contents
QSvgRenderer svgRenderer(doc.toByteArray());
// create pixmap target (could be a QImage)
QPixmap pix(svgRenderer.defaultSize());
pix.fill(Qt::transparent);
// create painter to act over pixmap
QPainter pixPainter(&pix);
// use renderer to render over painter which paints on pixmap
svgRenderer.render(&pixPainter);
QIcon myicon(pix);
// Use icon ....
}
void SetAttrRecur(QDomElement &elem, QString strtagname, QString strattr, QString strattrval)
{
// if it has the tagname then overwritte desired attribute
if (elem.tagName().compare(strtagname) == 0)
{
elem.setAttribute(strattr, strattrval);
}
// loop all children
for (int i = 0; i < elem.childNodes().count(); i++)
{
if (!elem.childNodes().at(i).isElement())
{
continue;
}
SetAttrRecur(elem.childNodes().at(i).toElement(), strtagname, strattr, strattrval);
}
}
:
http://doc-snapshot.qt-project.org/4.8/qwidget.html#setGraphicsEffect
http://doc-snapshot.qt-project.org/4.8/qgraphicscolorizeeffect.html
EDIT:それともMacをサポートする必要がある場合、SVGレンダリングやエフェクトを行いますQGraphicsViewの内部にあります。
http://doc-snapshot.qt-project.org/4.8/qgraphicsitem.html#setGraphicsEffect
セットアップあなたの色付け効果は白、それを色、svgWidgetに設定します。
希望に役立ちます。
笑、私は全体QGraphicsEffectsにかましてきた複数回のMac上で作業をいけない:( – chacham15
あなたはQGraphicsViewにそれをレンダリングする気にしない場合は、QGraphicsEffectsがサポートされなければならない。やり方もあります。それをQPixmapまたはQImageにレンダリングしてから別の合成モードでレンダリングしてくださいhttp://www.slideshare.net/qtbynokia/special-effects-with-qt-graphics-viewこのスライドにはいくつかの素晴らしいコードサンプルがあります表示。 – phyatt
Qtの新しいビルドでグラフィック効果を確認する必要があります。私はそれらが修正されている可能性があります。これらの2つのリンクの間の欠落しているノートを見てください:http://qt-project.org/doc/qt-4.8 /qwidget.html#setGraphicsEffectとhttp://qt-project.org/doc/qt-5/qwidget.html#setGraphicsEffect ...これはもはや '注:グラフィックスはMacではサポートされていないので、ウィジェットのレンダリングに何らの違いも生じません。Qt5の場合 – phyatt
白が唯一必要な色ならば、簡単な解決策はイメージエディタ(Inkscapeなど)で元のSVGイメージの色を変更することです。もちろん、さまざまな色の画像を使用する必要がある場合は、合理的な解決策にはなりません。
SVG形式はXMLベースでXMLはASCIIテキストなので、QStringにSVGリソースをロードしてQString :: replace( "\"#000000 \ ""、 "\" #ffffff \ "")、変更されたQStringをQSVGRendererに渡します。
qt5 doc.documentElement()が "読み取り専用"オブジェクトを返すので、これはうまくいかないようです。それに変更を加えることはまったく機能しません。 –