参考资料: 点击打开链接 http://blog.csdn.net/qinpanke/article/details/8062517
点击打开链接 http://blog.csdn.net/zbc415766331/article/details/17709867
资源链接:
QT: 点击打开链接
VS2013: 点击打开链接
Windows10: 点击打开链接
qwtplot3d: 点击打开链接
Qwtplot3d介绍:
qwtplot3d是基于QT环境,以c++和opengl开发的三维显示库,目前,最新版为Version 0.2.7版,是在QT4的基础上编译的。具体编译方式请参考以上参考资料链接。
步骤:
1. 以Version 0.2.7为例,将源文件解压至不包含汉字的目录。
2. 打开目录,如下图所示:
文件中dsp.dat是在windows下以命令行形式生成vs工程makefile的批处理文件,可以不予理睬。
3.将opengl库拷贝至该目录下如下图,(也可不予拷贝,手动连接库)
其中,opengl内包括gl.h glu.h glut.h 等,如下图所示:
用QTCreator打开工程,修改TEMPLAT增加LIBS:(各参数代表的含义请参照我另一篇博客 Qt .pro文件部分变量解析)
1). 由于我们编译的工程师在qtcreator下使用,所有将win32:
TEMPLATE
=
vclib修改为win32:
TEMPLAT = lib
2) 添加工程所需的opengl库 win32:
LIBS
+=
-L$$
PWD/opengl
-lglu
-lglut
-lopengl
4.执行qmake——构建项目qwplot3d工程,此时会报错:显示找不到gluErroString,原因是项目内没有包含opengl的glu库
解决方法:在错误所在头文件添加对应glu库,我的是
#include
5.再次编译通过(文章没有出现参考所出现的stdio缺失),在对应的lib目录内生成了dll
,如下图所示:
但是并没有生成lib文件,这里导出的动态库实际上是不完全的,经过查证发现,QT5以后将Q_WS_WIN宏改为了Q_OS_WIN
点击打开链接,所以下一步是将该工程内的所有Q_WS_WIN宏改为Q_OS_WIN,保存并再次编译,我们发现现在生成了lib文件
到此,库的编译完成,如下图所示:
使用库实现example:
1.将lib和dll文件拷贝至你个人的库目录,我个人放置在opengl同级lib目录中,如下图所示:
2.打开examples进入例子工程,其中common.pro是各子工程调用的共同设置,我们对它进行修改,即可对所有子例子工程进行修改:
由于我们采用的是QTcreator环境不是VS环境,因此需要删除QMAKE_LFLAGS += /NODEFAULTLIB:msvcrt 和TEMPLATE = vcapp,同时
修改win32的LIBS库(也就是windows平台下的库,我们考虑到跨平台问题,我们一般对特定的库做平台限定),如下图所示:
2. 这里将LIBS及对应的库修改为
LIBS += -L$$PWD/../lib -lqwtplot3d
LIBS += -L$$PWD/../opengl -lglu -lglut -lopengl
3.打开designerwork.h头文件,将
#include
等修改为QT5对应的头文件#include
3.执行qmake,执行编译,链接,将dll文件拷贝至对应bin文件,运行:即可成功编译例子工程,执行情况如下图所示:
其他说明:
1.要用debug版本的qwplot3d库,否则会导致系统运行不成功。参考:点击打开链接 http://blog.csdn.net/yuzhiyuxia/article/details/7760917
2. 不可以通过在qwplot3d的导出库部分人工define dllexport的形式来导出动态库,只能通过pro中定义DEFINES,否则在该动态库被掉用的时候
调用者无法通过定义DEFINES来告诉程序这里是导入动态库的,本例中example中的DEFINES += QT_DLL QWT3D_DLL会失效。
3.建议在程序调试好之前,都要用debug版的dll。