专栏首页python3QT qt 3d 绘图

QT qt 3d 绘图

qt 3d 绘图

首先不得不说,要感谢北京邮电大学的阿科。感谢他慷慨的分享和极具科学态度的记录,将自己搜集到的众多资料收集整理发布,拯救众多苦逼寻找方案的程序员于苦海之中。因为最近接手新的项目,涉及到使用opengl做surface plot编程。第一个想到的就是能否使用现有的开源API来完成这些工作。通过多方寻找,我发现了两个开源的project:

1 qwtplot3d(http://qwtplot3d.sourceforge.net/web/navigation/feature_frame.html

2 Sapphire-3D-Surfaces(http://qt-apps.org/content/show.php/Sapphire+3D+Surfaces?content=118944

注意这里我使用的开发环境是Qt,语言为C++。

第二个下载源代码,再win7的Qt Creator一下就编译通过了。但是第一个却很艰难,于是各方寻找解决方案,最终在阿科的博客中找到了比较详细的解决方法,原文链接:(http://blog.csdn.net/qinpanke/article/details/8062517)

阿科的方法基本是正确的,但是在细节上与我的实际实验结果有所不同,我将以阿科的内容为基础,增加一些自己实际实验的内容。

          1、从网上下载qwtplot3D的最新版本:http://qwtplot3d.sourceforge.net/

          2、解压qwtplot3d-0.2.7.zip到C盘根目录下(注意:路径中不能带有中文汉字)。

          3、打开C:\qwtplot3d-0.2.7\qwtplot3d,将会看到qwtplot3d.pro文件。

          4、用QtCreator打开qwtplot3d.pro文件,并执行编译命令会出现如下如下错误:No rule to target 'Makefile.Debug'.  Stop.如下图所示:

          解决方法:

          双击并打开上图左侧中的qwtplot3d.pro文件,修改该文件部分内容:  win32:TEMPLATE= vclib   修改为: win32:TEMPLATE= lib

          5、修改完成后,再次点击编译运行。会再次出现错误:'stderr' was not declared in this scope  和  'fprintf' was not declared in this scope。 如下图所示:

解决方法:

           打开左侧Source》src》qwt3d_function.cpp文件。并在顶部添加语句:#include "stdio.h"

           6、再次编译。即可顺利完成qwtplot3d工程的编译,不会再遇到错误。

           (这个地方实际还是会有错误的,会出现红色的输出提示“The process could not be started!”,但是已经生成了C:\qwtplot3d-0.2.7\qwtplot3d-build-desktop\lib目录下面的libqwtplot3d.a和qwtplot3d.dll,只要生成了就可以了,由上面的错误没有关系)

          此时,打开C:\qwtplot3d-0.2.7\qwtplot3d-build-desktop\lib文件夹。会看到生成两个动态库文件:libqwtplot3d.a和qwtplot3d.dll。这就是编译好的qwtplot3d的动态库文件。作为开发而言,就可以直接使用。当然,我们不仅仅是希望编译生成动态库,还希望将qwtplot3d自带的Demo编译并运行通过。没问题,继续看下面的。

          复制C:\qwtplot3d-0.2.7\qwtplot3d-build-desktop\lib文件夹到C:\qwtplot3d-0.2.7\qwtplot3d\下面

          7、编译qwtplot3d自带的Demo程序。打开C:\qwtplot3d-0.2.7\qwtplot3d\examples文件夹。用QtCreator打开example.pro文件,点击编译运行,同样会出现No rule to target 'Makefile.Debug'.  Stop的错误。这里需要修改的pro文件是common.pro文件。

解决方法:

          打开common.pro文件。删除语句:TEMPLATE = vcapp和 QMAKE_LFLAGS += /NODEFAULTLIB:msvcrt

         8、修改完成后,再次编译example.pro文件会出现 :: error: ../../lib/qwtplot3d.lib: No such file or directory 。(注意:也可能是出现无法 make 的错误。其实也是这个原因导致的,同样按照下面的修改方法也可以解决)

         修改方法:

         打开common.pro文件。修改语句:LIBS+= ../../lib/qwtplot3d.lib  修改为:LIBS+= ../../lib/libqwtplot3d.a(这里换成那个dll的动态链接库文件也是可以的,因为.a文件是linux下的动态链接库文件,而.dll是window下面的动态链接库文件)

        9、修改完成后,再次编译example.pro文件就不会出现错误。但是,编译完成运行的时候出现:

         Starting C:\qwtplot3d-0.2.7\qwtplot3d\examples-build-desktop\bin\autoswitch.exe...

         C:\qwtplot3d-0.2.7\qwtplot3d\examples-build-desktop\bin\autoswitch.exe exited with code -1073741515

        出现这个问题的原因是动态库没有在example生成的可执行文件的目录下。

解决方法:

    打开C:\qwtplot3d-0.2.7\qwtplot3d\lib文件夹,拷贝两个文件libqwtplot3d.a和qwtplot3d.dll。到文件夹:C:\qwtplot3d-0.2.7\qwtplot3d\examples-build-desktop\bin。(注意:这是我example生成的文件夹,要看一下你自己的生成的是不是这个位置)

   10、正确运行。看一下运行结果吧。

   实际的运行结果有多个,因为这个example里面有很多个例子,可以选择运行哪个例子:

运行结果大家可以看阿科的博客,也可以自己尝试,是出现不同的surface plot图像

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • h3c做nqa的相关配置及作用

    nqa entry admin piaojiaosuo 建立nqa事件组(标记为到票交所的线路 名字可按要求设置)

    py3study
  • XenDesktop7.15CU3 文件

    最近部署一桌面项目使用XenDesktop 7.15 LTSR CU3版本,在做文件重定向时遇到“appdata”文件夹重定向始终无法生效,多次检查配置都没有任...

    py3study
  • H3C nqa 配置

      reaction 1 checked-element probe-fail threshold-type consecutive 5 action-type...

    py3study
  • 【每周一坑】黑色星期五

    今天的题目跟西方的传说有关 ? “黑色星期五”这个词对于爱购物的人来说并不陌生,它是美国人民的购物狂欢日,堪比中国的双十一、双十二。 但其实“黑色星期五”在西方...

    Crossin先生
  • [DeeplearningAI笔记]卷积神经网络2.3-2.4深度残差网络

    对于一个"Plain Network 普通网络",把它变为 ResNet 的方法是加上所有的跳远连接(skip connections).每两层增加一个跳远连接...

    DrawSky
  • ResNet - 2015年 ILSVRC 的赢家(图像分类,定位及检测)

    在本文,我们ResNet进行了回顾。通过学习残差表征函数而不是直接学习目标表征,ResNet可以拥有多达152层的非常深的网络。

    AI研习社
  • 什么是5G,我们能从中得到什么?

    今年,全球首个5G网络开通,向用户承诺了更快的数据传输速度和更低的延迟。此外,5G还为新的工业应用开辟了道路,成为实现“智能城市”的关键因素。5G给我们如今日益...

    SDNLAB
  • C#实例:串口通讯

     最近在研究串口通讯,其中有几个比较重要的概念,RS-232这种适配于上位机和PC端进行连接,RS-232只限于PC串口和设备间点对点的通信。它很简单的就可以进...

    zls365
  • 基础知识 | 每日一面(78)

    读者:我的程序的屏幕提示和中间输出有时显示在屏幕上, 尤其是当我用管道向另一个程序输出的时候。

    闫小林
  • ECMAScript 6 入门简介

    ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券