Qt Creator集成QWT插件:从源码编译到设计器拖拽的完整实践
1. 为什么需要QWT插件在Qt开发中我们经常会遇到需要绘制专业图表的需求。虽然Qt自带的绘图功能已经很强大了但当我们需要绘制复杂的科学图表、工程图表时原生的Qt Charts可能就显得力不从心了。这就是QWTQt Widgets for Technical Applications大显身手的时候。QWT是一个开源的Qt部件库专门为技术应用开发而设计。它包含了各种专业的图表控件比如曲线图、柱状图、频谱图、指南针、旋钮等。我在实际项目中经常用它来开发工业控制软件的监控界面实测下来它的性能和稳定性都非常出色。不过QWT有个小麻烦它不像Qt自带的控件那样可以直接在Qt Creator的设计界面中拖拽使用。这就需要我们手动编译安装QWT插件让它和Qt Creator的设计器无缝集成。下面我就详细说说这个过程的每个步骤以及我踩过的那些坑。2. 准备工作环境一致性检查2.1 确认Qt Creator的编译器版本在开始之前有个非常重要的原则必须强调编译器版本必须一致。我刚开始接触QWT时就栽在这个坑里折腾了好几天才发现问题所在。要查看Qt Creator使用的编译器版本可以这样做打开Qt Creator点击菜单栏的帮助→关于在弹出的窗口中查看编译器信息比如我的环境显示的是MSVC 2015, 32 bit。这意味着后续所有操作都必须使用这个版本的编译器。如果混用了不同版本的编译器虽然代码可以编译运行但就是无法在设计器中拖拽QWT控件。2.2 下载QWT源码QWT的源码可以从官网下载目前最新稳定版是6.2.0。下载后解压到一个没有中文和空格的路径下比如我习惯放在D:\Libs\qwt-6.2.0。这里有个小技巧建议把解压后的文件夹改个简单的名字比如直接叫qwt。因为后续的路径配置会比较长短路径能减少出错概率。3. 编译QWT源码3.1 使用Qt Creator打开项目找到解压后的QWT文件夹用Qt Creator打开其中的qwt.pro文件。这里要注意几个关键点在项目设置中确保构建配置选择的是Release检查编译器是否和Qt Creator使用的一致我的是MSVC2015 32bit如果提示缺少套件需要先在Qt安装目录下配置好对应的工具链3.2 修改配置文件为了让QWT能正确编译并在设计器中使用需要修改几个配置文件在qwt.pro同级目录下找到qwt.prf文件去掉QMAKE_RPATHDIR前面的注释符号#打开designer/qwtbuild.pri文件注释掉CONFIG debug_and_release这一行这些修改主要是为了确保生成的库文件能被正确链接和加载。我第一次编译时跳过了这步结果虽然编译成功了但设计器就是识别不到插件。3.3 执行编译现在可以开始编译了先点击构建菜单中的执行qmake然后点击构建按钮开始编译等待编译完成这个过程大概需要5-10分钟编译完成后可以在输出目录下看到生成的库文件和插件。我的输出路径是D:\Libs\qwt\build-release里面会有lib和designer两个重要文件夹。4. 安装QWT到Qt环境4.1 复制库文件编译完成后需要把生成的文件复制到Qt的安装目录中将lib文件夹下的qwt.lib和qwtd.lib复制到Qt安装目录的lib文件夹下我的路径是D:\Qt\Qt5.9.2\5.9.2\msvc2015\lib将lib文件夹下的qwt.dll和qwtd.dll复制到Qt安装目录的bin文件夹下我的路径是D:\Qt\Qt5.9.2\5.9.2\msvc2015\bin4.2 安装设计器插件为了让Qt Creator的设计器能识别QWT控件需要安装设计器插件找到designer\plugins\designer目录下的qwt_designer_plugin.dll复制这个文件到两个位置Qt的designer插件目录D:\Qt\Qt5.9.2\5.9.2\msvc2015\plugins\designerQt Creator的插件目录D:\Qt\Qt5.9.2\Tools\QtCreator\bin\plugins\designer这一步很关键我遇到过只复制到一个位置的情况结果Qt Creator的设计器能看到QWT控件但编译运行时却找不到库文件。4.3 配置头文件最后还需要配置头文件在Qt安装目录的include文件夹下新建一个Qwt文件夹我的路径是D:\Qt\Qt5.9.2\5.9.2\msvc2015\include\Qwt将QWT源码src目录中的所有头文件复制到这个新建的文件夹中5. 在项目中使用QWT控件5.1 创建测试项目现在可以创建一个测试项目来验证QWT是否安装成功了新建一个Qt Widgets Application项目在项目目录下创建lib和include文件夹将qwt.lib和qwtd.lib复制到lib文件夹将QWT的头文件复制到include文件夹5.2 配置项目文件右键点击项目名称选择添加库→外部库然后选择qwt.lib文件。Qt Creator会自动在.pro文件中添加必要的配置win32: LIBS -L$$PWD/lib/ -lqwt INCLUDEPATH $$PWD/include DEPENDPATH $$PWD/include5.3 使用QWT控件现在双击.ui文件打开设计器应该能在左侧的控件列表中看到QWT分类里面包含了各种图表控件。我习惯先用QwtPlot来测试随便拖拽一个到界面上然后添加几条曲线看看效果。编译运行时记得检查编译器版本是否一致。如果一切正常就能看到漂亮的图表显示出来了。6. 常见问题排查在实际使用中可能会遇到各种问题。这里分享几个我遇到过的典型问题及解决方法设计器看不到QWT控件检查插件是否复制到了正确的位置确认Qt Creator和插件的编译器版本一致尝试重启Qt Creator编译时报找不到QWT符号检查.pro文件中的库路径是否正确确认链接的是qwt.lib而不是qwt.dll检查头文件路径是否包含在INCLUDEPATH中运行时程序崩溃确认qwt.dll在可执行文件的同级目录或系统PATH中检查Debug和Release版本是否混用尝试清理项目并重新构建控件显示不正常检查是否在代码中正确调用了QwtPlot的初始化函数确认在main.cpp中包含了qwt_plot.h头文件尝试在代码中手动创建QWT控件绕过设计器测试7. 进阶使用技巧当QWT基本功能都能正常使用后可以尝试一些进阶技巧来提升开发效率自定义控件样式QWT提供了丰富的样式定制接口可以通过继承现有控件类来创建自定义样式。比如我经常重写QwtPlotCurve的绘制方法来实现特殊的曲线效果。性能优化对于大数据量的图表可以启用QWT的硬件加速功能。在QwtPlot的构造函数中添加setCanvas(new QwtPlotOpenGLCanvas(this));多语言支持QWT的文本显示默认支持多语言可以通过QwtText类方便地实现国际化。与Qt Charts混合使用虽然QWT功能强大但有时也需要结合Qt Charts使用。我通常的做法是在不同的子窗口中分别使用两种库避免直接混用。跨平台注意事项如果在Linux下使用QWT编译过程略有不同需要特别注意库文件的安装路径和权限设置。