关闭含QwtSymbol的QWT星座图应用报错,求QWT_NO_SVG定义位置
这个问题我之前帮开发者排查过不少次,大概率是Qwt的SVG模块在程序退出时的资源析构冲突导致的。定义QWT_NO_SVG可以禁用Qwt的SVG支持,从而绕过这个问题。下面是几个可行的定义位置,按推荐程度排序:
推荐的
QWT_NO_SVG定义位置 1. 项目构建配置文件(最推荐)
如果是用Qt Creator+qmake开发,直接在你的项目.pro文件里添加一行:
DEFINES += QWT_NO_SVG
这样整个项目编译时都会带上这个宏定义,所有源文件都会生效,不用逐个文件修改。
如果是Visual Studio环境,右键项目→属性→配置属性→C/C++→预处理器→预处理器定义,添加QWT_NO_SVG即可。
2. 在包含Qwt头文件前手动定义
如果只想针对特定文件生效(比如你绘制星座图的那个源文件),在所有Qwt相关的#include语句之前加上:
#define QWT_NO_SVG #include <qwt_plot.h> #include <qwt_symbol.h> // 其他Qwt头文件...
这样只会在当前文件里禁用SVG支持,不影响项目里其他使用QWT的场景。
3. 修改QWT的全局头文件(不推荐)
找到QWT安装目录下的qwt_global.h文件,在文件开头添加:
#define QWT_NO_SVG
但这种方式会影响所有使用这个QWT库的项目,灵活性极差,除非你所有项目都不需要SVG支持,否则不建议这么做。
补充说明
定义QWT_NO_SVG后,Qwt会跳过SVG相关的符号渲染和资源管理代码,从根源上避免程序退出时的析构报错。如果之后需要恢复SVG功能,只要移除这个宏定义重新编译即可。
内容的提问来源于stack exchange,提问作者Тарас Колеско
相关产品推荐
相关产品推荐

