(这篇文章原发表于CSDN,CSDN密码泄露事件后就删除了,现重发于这里,略有修改。)
一直很喜欢windows 7的Aero效果,很想在自己的程序中用上。但Aero效果是由windows的DWM (Desktop Window Manager)提供的,qt并没有提供调用的方式,自己也不懂windows的编程。好在CuteQt上提供了用qt封装好的版本,可以供我尝试。原帖见<<qt如何在vista和windows7下实现Aero效果>>。
下载了它的源码编译,运行后发现有几个问题:
1、win7下将目标程序设置为xp兼容模式,运行时依然开启了aero。即没有检测系统版本。
2、win7未开启aero效果,运行目标程序,再开启aero效果。此时程序不能动态切换显示效果。
3、窗体若启用了aero效果,WindowNotifier会记录它的指针。将窗体delete后,WindowNotifier依然保留其指针。此时若发生系统aero效果切换事件(如由一个支持aero效果的主题换到一个不支持aero效果的主题),程序将会崩溃。这是因为使用了野指针。
因此我修改了qtwin.h和qtwin.cpp,修正了上面的几个问题。由于QtWin::enableAeroWindow(QWidget*widget,bool enable =true)这个函数一调用就程序崩溃,自己不懂windows编程也无法修改,于是将其注释掉,并添加了两个新的函数staticboolQtWin::enableAeroEffect(QWidget*widget)和staticvoidQtWin::disableAeroEffect(QWidget*widget)。使用时只需包含qtwin.h头文件,无须判断是否windows系统了。
具体代码请看Ez拼图源码中的qtwin.h和qtwin.cpp:点击下载
文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
- 原文出处:三生石的博客
没有评论:
发表评论