• 15836阅读
  • 15回复

[提问]为什么qt显示svg文件时背景变黑色? [复制链接]

上一主题 下一主题
离线chemmyhuang
 
只看楼主 倒序阅读 楼主  发表于: 2011-09-20
手上有一个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
只看该作者 1楼 发表于: 2011-09-21
继续求帮助!
离线jdwx

只看该作者 2楼 发表于: 2011-09-21
回 1楼(chemmyhuang) 的帖子
QPixmap pixmap(rect());
pixmap.fill(QColor(0,0,0,0));
QPainter p(&pixmap);
QLabel label;
svgRenderer->load(svgPath);
svgRenderer->render(&p);    
  label->setPixmap(pixmap );
试试上面的代码。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线chemmyhuang
只看该作者 3楼 发表于: 2011-09-21
回 2楼(jdwx) 的帖子
就是不使用QImage是吗?我试过了还是一样的
另外我发现,用QT的demo程序在windows下打开这个svg文件发现有些字是彩色的,当然背景还是黑的
但把demo的代码放到linux下编译运行,文字全部都是黑色的!
问题真是越来越有趣了。。
离线jdwx

只看该作者 4楼 发表于: 2011-09-21
回 3楼(chemmyhuang) 的帖子
pixmap.fill(QColor(0,0,0,0));关键是这行让背景透明。
我用svg没啥问题,另外QtCreator的资源文件编辑器可以显示svg,把你的svg加到资源文件里就能看到效果。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线chemmyhuang
只看该作者 5楼 发表于: 2011-09-21
回 4楼(jdwx) 的帖子
我的代码打开其他一些的svg文件也没有问题,我觉得问题可能是在于我现在要打开的那个是个图片背景是透明的svg文件,我想知道在无法改变svg的基础上怎么设置QT让这个文件显示正常。
我的思路是把QLabel或者QPixmap或者QImage的背景设颜色,结果发现也只有svg文件中文字部分的背景变了色,而图片的背景仍然是一片黑色。。。
另外,QtCreator的资源文件编辑器请问是指什么?qrc吗?
离线chemmyhuang
只看该作者 6楼 发表于: 2011-09-21
回 4楼(jdwx) 的帖子
在QtCreator的projects处用add existing file的形式打开我的svg文件,图片的背景也是黑的。。。
离线jdwx

只看该作者 7楼 发表于: 2011-09-21
回 6楼(chemmyhuang) 的帖子
是qrc,可以的话发一个svg上来,我很好奇!
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线dbzhang800

只看该作者 8楼 发表于: 2011-09-21
注意: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
只看该作者 9楼 发表于: 2011-09-21
回 7楼(jdwx) 的帖子
实在不好意思,这个文件可能涉及到公司的图纸,不敢发。。
文件就是在中间有一张图片,图片四周是表格填满了文字,整个文件的背景是透明的
但用QT渲染后就变黑了,而且我现在发现表格的文字位置也不对!
用webview打开是正常的!所以我想应该是可以设置一些什么参数的。。不知道思路有没问题
离线chemmyhuang
只看该作者 10楼 发表于: 2011-09-21
回 8楼(dbzhang800) 的帖子
你的意思是说,我这边问题的原因是QtSVG对svg文件本身就只是部分支持的,所以可能导致显示不正常?
最初时我试过Qtwebkit的,但是它渲染同样的svg的文件所花费的时间比用QtSVG单做的时间要长几倍,不清楚它渲染的过程中还做了一些什么,所以才选择用QtSVG做渲染的,没想到也是问题多多。。。
离线dbzhang800

只看该作者 11楼 发表于: 2011-09-21
Re:回 8楼(dbzhang800) 的帖子
引用第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
只看该作者 12楼 发表于: 2011-09-21
回 11楼(dbzhang800) 的帖子
看了一下,我那个svg文件是1.0的,QtSvg不支持吗?我对svg不太懂。。
离线chemmyhuang
只看该作者 13楼 发表于: 2011-09-26
问题解决了,需要手动为svg文件加一个白色背景,否则透明背景就会显示成黑色
离线fxdigital

只看该作者 14楼 发表于: 2015-04-01
回 chemmyhuang 的帖子
chemmyhuang:问题解决了,需要手动为svg文件加一个白色背景,否则透明背景就会显示成黑色 (2011-09-26 17:22) 

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

只看该作者 15楼 发表于: 2020-04-10
求解决办法,我也遇到这个问题,原因是SVG里面用了图片,由于图片不是用矢量保存的,所以图片背景是黑色。但是一直找不到解决办法,其它地方用的都是SVG,也不想用图片来显示。
楼主能提供下解决方法吗?
快速回复
限100 字节
 
上一个 下一个