查看完整版本: [-- 为什么qt显示svg文件时背景变黑色? --]

QTCN开发网 -> Qt基础编程 -> 为什么qt显示svg文件时背景变黑色? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

chemmyhuang 2011-09-20 16:18

为什么qt显示svg文件时背景变黑色?

手上有一个svg文件,里面有文字和一张图片,背景色是透明的(我不能更改这个svg文件)
用浏览器显示正常,但用QT显示图片背景变成了黑色,而文字背景部分正常是白色
请教大家QT应该如何做才能让此图显示正常?
我的做法是:

QPainterpainter(QImage Image);
      QSvgRenderer svgRenderer;
      QLabel label;

      svgRenderer->load(svgPath);
      svgRenderer->render(&painter);

      QPixmap pixmap = QPixmap::fromImage(* Image);
       label->setPixmap(pixmap );
代码只是主要步骤示意,我试过将QPainter的背景色用painter.setBackground设成背景白色
但这只是让文字部分的背景色全部变成了白色(原先有一部分文字的背景也是黑的)
请教大家QT里还需如何处理使这个svg文件显示正常?急!!!

chemmyhuang 2011-09-21 10:04
继续求帮助!

jdwx 2011-09-21 11:03
QPixmap pixmap(rect());
pixmap.fill(QColor(0,0,0,0));
QPainter p(&pixmap);
QLabel label;
svgRenderer->load(svgPath);
svgRenderer->render(&p);    
  label->setPixmap(pixmap );
试试上面的代码。

chemmyhuang 2011-09-21 13:35
就是不使用QImage是吗?我试过了还是一样的
另外我发现,用QT的demo程序在windows下打开这个svg文件发现有些字是彩色的,当然背景还是黑的
但把demo的代码放到linux下编译运行,文字全部都是黑色的!
问题真是越来越有趣了。。

jdwx 2011-09-21 14:27
pixmap.fill(QColor(0,0,0,0));关键是这行让背景透明。
我用svg没啥问题,另外QtCreator的资源文件编辑器可以显示svg,把你的svg加到资源文件里就能看到效果。

chemmyhuang 2011-09-21 15:12
我的代码打开其他一些的svg文件也没有问题,我觉得问题可能是在于我现在要打开的那个是个图片背景是透明的svg文件,我想知道在无法改变svg的基础上怎么设置QT让这个文件显示正常。
我的思路是把QLabel或者QPixmap或者QImage的背景设颜色,结果发现也只有svg文件中文字部分的背景变了色,而图片的背景仍然是一片黑色。。。
另外,QtCreator的资源文件编辑器请问是指什么?qrc吗?

chemmyhuang 2011-09-21 15:19
在QtCreator的projects处用add existing file的形式打开我的svg文件,图片的背景也是黑的。。。

jdwx 2011-09-21 16:03
是qrc,可以的话发一个svg上来,我很好奇!

dbzhang800 2011-09-21 16:07
注意:QtSvg 模块只支持 SVG Tiny,而QtWebKit提供对 SVG Full的支持。而这,也是QtSvg模块将被废弃的原因。


QtSvg
Overall module state: Deprecated
New maintainer required
Reasoning: SVG Full (as opposed to SVG Tiny) functionality available in QtWebKit, which should be used instead; we welcome research for a replacement for the SVG-generating code.

chemmyhuang 2011-09-21 16:28
实在不好意思,这个文件可能涉及到公司的图纸,不敢发。。
文件就是在中间有一张图片,图片四周是表格填满了文字,整个文件的背景是透明的
但用QT渲染后就变黑了,而且我现在发现表格的文字位置也不对!
用webview打开是正常的!所以我想应该是可以设置一些什么参数的。。不知道思路有没问题

chemmyhuang 2011-09-21 16:35
你的意思是说,我这边问题的原因是QtSVG对svg文件本身就只是部分支持的,所以可能导致显示不正常?
最初时我试过Qtwebkit的,但是它渲染同样的svg的文件所花费的时间比用QtSVG单做的时间要长几倍,不清楚它渲染的过程中还做了一些什么,所以才选择用QtSVG做渲染的,没想到也是问题多多。。。

dbzhang800 2011-09-21 17:01
引用第10楼chemmyhuang于2011-09-21 16:35发表的 回 8楼(dbzhang800) 的帖子 :
你的意思是说,我这边问题的原因是QtSVG对svg文件本身就只是部分支持的,所以可能导致显示不正常?
最初时我试过Qtwebkit的,但是它渲染同样的svg的文件所花费的时间比用QtSVG单做的时间要长几倍,不清楚它渲染的过程中还做了一些什么,所以才选择用QtSVG做渲染的,没想到也是问题多多。。。

不是说部分支持,是标准不一样,QtSvg 完全支持 SVG Tiny 1.2。(而不少软件还有可能都停留在svg1.0或svg1.1上。比如adobe acrobat)

但你用的可能是 SVG Full 1.2 ,甚至是 SVG 2.0 的特性。




chemmyhuang 2011-09-21 17:39
看了一下,我那个svg文件是1.0的,QtSvg不支持吗?我对svg不太懂。。

chemmyhuang 2011-09-26 17:22
问题解决了,需要手动为svg文件加一个白色背景,否则透明背景就会显示成黑色

fxdigital 2015-04-01 10:52
chemmyhuang:问题解决了,需要手动为svg文件加一个白色背景,否则透明背景就会显示成黑色 (2011-09-26 17:22) 

额, 是在LABEL上添加一个背景色么,我也遇到这样一个问题

zs_test 2020-04-10 14:01
求解决办法,我也遇到这个问题,原因是SVG里面用了图片,由于图片不是用矢量保存的,所以图片背景是黑色。但是一直找不到解决办法,其它地方用的都是SVG,也不想用图片来显示。
楼主能提供下解决方法吗?


查看完整版本: [-- 为什么qt显示svg文件时背景变黑色? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled