У меня есть svg, загруженный в ресурсы, но он черный. Как изменить цвет на белый?Измените цвет svg в qt
ответ
Как вы можете это сделать в Qt, не забудьте добавить модули xml и svg в проект qt (* .pro-файл). Этот фрагмент кода изменяет цвет, изменяя атрибут «fill» любого элемента «path», но вы можете использовать его для изменения любого атрибута любого элемента.
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);
}
}
До тех пор, пока вы не нужны на Mac, это должно работать:
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 В этом слайде есть отличные примеры кода show – phyatt
Я должен дважды проверить действие графического эффекта на новых строках Qt. Думаю, они, возможно, исправили его. Посмотрите на недостающую ноту между этими двумя ссылками: http://qt-project.org/doc/qt-4.8 /qwidget.html#setGraphicsEffect и http://qt-project.org/doc/qt-5/qwidget.html#setGraphicsEffect ... он больше не говорит 'Примечание: Графические эффекты re не поддерживается на Mac, поэтому они не будут вызывать каких-либо различий в рендеринге виджета. 'для Qt 5. – phyatt
Если вам нужен только белый цвет, то простым решением было бы изменить цвет исходного изображения SVG с помощью редактора изображений (например, Inkscape). Конечно, если вам нужно использовать изображение со множеством разных цветов, это не будет разумным решением.
Поскольку формат SVG основан на XML, а XML - это просто текст ASCII ... вы можете загрузить ресурс SVG в QString, вызовите QString :: replace ("\" # 000000 \ "", "\" #ffffff \ ""), а затем передать измененный QString в ваш QSVGenderer.
- 1. SVG Object - Измените цвет
- 2. Выберите все в текущем слое и измените цвет хода. SVG
- 3. Наведите указатель мыши и измените цвет в SVG
- 4. CSS - Измените цвет заливки на наведении - SVG PATH
- 5. Измените ход и цвет заливки SVG при зависании
- 6. Измените цвет SVG на внешний источник через jquery
- 7. Измените толщину формы SVG
- 8. Загрузить svg из ресурса Qt в строку и изменить цвет
- 9. Измените параметры svg externally
- 10. Измените цвет навигация Цвет клика
- 11. Измените цвет SVG с помощью Css или сделайте это вручную в SVG-файле
- 12. Измените цвет панели задач
- 13. Android - Измените цвет Drawables
- 14. Измените цвет пули в UITextView
- 15. Измените цвет строки в flot.js
- 16. Необходимо изменить цвет изображения SVG в QML
- 17. Поддерживает ли QT svg?
- 18. выберите опцию и измените объект приличия svg
- 19. цвет фона текста в SVG
- 20. цвет SVG Иконка в FloatingActionButton
- 21. Изменить цвет символа SVG
- 22. Случайный цвет svg stroke
- 23. Изменить цвет svg
- 24. SVG Размер и цвет
- 25. SVG изображение меняется цвет
- 26. изображение/SVG изменение цвет?
- 27. Как изменить цвет svg?
- 28. Цвет участка SVG
- 29. WebStorm - Измените цвет squiggly линий
- 30. Измените светлый цвет HorizontalScrollView - OverScrollMode
Кажется, что это не работает, потому что в qt5 doc.documentElement() возвращает объект« только для чтения ». Внесение изменений в него вообще не работает. –