因工作需要,需要在Qt下建立一個顯示3D曲線的模塊。在試驗各種方案的過程中,發現這個第三方庫。雖然根據《QWT3D 之 三維動態曲線的實現》(地址: https://blog.csdn.net/caoqiang2006/article/details/53038441)修改QwtPlot3D模塊,但是依然無法繪制簡單的3D曲線,故放棄此方案(不過這個模塊的3D效果也有點過時了, 請看最后示例運行效果截圖)。
現保留一篇QwtPlot3D編譯文章,以供紀念之。參考了《qwtplot3D安裝——終結解決方案(YOUYOU版)》(https://blog.csdn.net/youhaipeng/article/details/8201052), 謝謝此博文的作者分享編譯過程。
注: 根據QwtPlot3D官方網站(http://qwtplot3d.sourceforge.net/web/navigation/feature_frame.html), QwtPlot3D已停止維護, 且僅支持Qt3和Qt4版本。
一、編譯QwtPlot3D庫。
1. 進入https://sourceforge.net/projects/qwtplot3d/files/qwtplot3d/下載最新版QwtPlot3D, 不過最新版依然是2007-06-25發布的0.2.7版......
2. 解壓qwtplot3d-0.2.7.zip至任意磁盤根目錄下(注意: 由於Qt項目編譯不支持中文路徑和帶空格的路徑, 所以...)。我把它解壓到了D盤根目錄下。
3. 打開D:\qwtplot3d\,將會看到qwtplot3d.pro文件, 使用Qt Creator打開之。
4. 編譯之, 報錯: error: Makefile.Debug: No such file or directory, 如下圖所示:

5. 打開qwtplot3d.pro文件,修改該文件部分內容: win32:TEMPLATE= vclib 修改為: win32:TEMPLATE= lib。
6. 再次編譯之, 報錯, 注意, 這里和參考博文的錯誤信息不一致了, 錯誤來自OpenGL or GLU, error: 'gluErrorString' was not declared in this scope
err = gluErrorString(errcode); 如下圖所示:

7. 再次打開qwtplot3d.pro文件,新增語句: LIBS += -lopengl32 -lglu32。同時需要根據錯誤信息在qwt3d_openglhelper.h添加#include "GL/glu.h"。
8. 再次編譯之, 這個時候就完成編譯了, 不會報錯。打開D:\build-qwtplot3d-Desktop_Qt_5_10_1_MinGW_32bit-Debug\lib目錄即可發現編譯完成的libqwtplot3d.a和qwtplot3d.dll。
二、運行QwtPlot3D的Example
1. 進入D:\qwtplot3d\examples\, 用Qt Creator打開examples.pro文件。
2. 編譯之, 報錯: error: Makefile.Debug: No such file or directory。如下圖所示:

3. 打開在examples目錄下的common.pro文件。刪除語句:TEMPLATE = vcapp和 QMAKE_LFLAGS += /NODEFAULTLIB:msvcrt。
4. 再次編譯之, 報錯: error: ../../lib/qwtplot3d.lib: No such file or directory。這時需要再次打開common.pro文件, 修改語句:LIBS+= ../../lib/qwtplot3d.lib 修改為:LIBS += $$PWD/lib/libqwtplot3d.a。同時把之前編譯完成的D:\build-qwtplot3d-Desktop_Qt_5_10_1_MinGW_32bit-Debug\lib目錄復制到examples目錄下。
5. 再次編譯, 報錯, 提示未能鏈接OpenGL庫, 如下圖所示:

6. 明顯, 在common.pro文件中新增LIBS += -lopengl32 -lglu32。
7. 再次編譯, 還是報錯: ...\designerworkaround.h:4: error: QtGui/QMenu: No such file or directory, 這是由於Qt4下QMenu等被划歸QtGui模塊下, 而在Qt5中QMenu等被划歸到QtWidgets下造成的。根據錯誤信息, 打開designerworkaround.h文件並修改#include <QtGui/QMenu>等為#include <QMenu>等即可。
8. 再次編譯, 沒有出現任何錯誤, 在運行examples之前, 需要把之前編譯出的qwtplot3d.dll復制到examples的build目錄下的bin目錄里。如下圖所示:

9. 運行效果如下:

