Qt中显示wmf文件

     前一阵,在一项目中需要使用cad的图纸,但dwg太过复杂了,后来又研究了dxf,但有一些复杂点的dwg转换到了dxf,dxf变得很庞大,本来就是要在cad图间不停切换,这使的程序性能受到一点影响,后面在无意中发现cad能导出wmf文件,网上一查,wmf是Microsoft Windows中常见的一种图元文件格式,它具有文件短小、图案造型化的特点,心里一直高兴,心想终于找到好方法了。决定将wmf弄到项目里,结果却出现了一大堆的问题,首先发现Qt不支持wmf,既然不支持哪就自己用GDI来操作吧,一翻查资料后找到PlayEnhMetaFile API函数,结果运行PlayEnhMetaFile显示刚才从cad导出的wmf文件,结果不得行。难道windows也放弃了wmf?又在google里找了半天,发现由于windows 2000之后就不再提供对16位gdi函数的支持。所以播放WMF文件都是将其转换为EMF文件来播放的。普通的WMF文件只需要调用SetWinMetaFileBits方法即可顺利转换为EMF播放。但是由于Placeable WMF包含了映射和缩放信息,我们必须在转换的时候要将这些信息保存到EMF中去,朋友们可参照网上的转换方法,这里就不介绍了。

      转换成功后,终于能用PlayEnhMetaFile显示wmf文件了,心里一直高兴啊。但高兴劲还没过了几分钟,又发现问题了,我将wmf显示到一个widget中,widget周围还有一些widget,在缩放wmf的时候,发现wmf显示到widget外面去了,这怎么能行啊。这次在网上找了很久也没找到解决办法,自己也试了很多次,结果在一个老外写的文章里找到了解决问题的方法。那就是重载paintEngine,然后返回NULL,然后在paintEvent里使用GDI显示wmf即正常了。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值