找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 4302|回复: 1

qq空间老贴转载-QT与matcom结合的实例

[复制链接]
发表于 2014-2-19 19:27:26 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
matcom和vs兼容但是和qt有些不兼容,网上也没有解决方法,但是经我实践,最后成功了。整个过程如下:
        ① 安装qt和matcom。
        ②先用qtcreator4.7.4建立一个QT gui应用,我命名为another,把matcom的v4501v.lib和matlib.h加入工程根目录。
        ③将matlib.h文件拖入工程,这样就加上了头文件,右击another工程列表树最根处,在右键菜单中选添加库,弹出对话框,选择外部库,将v4501v.lib加进去。完成后在pro文件中,会是类似如下的结果:
#
# Project created by QtCreator 2013-04-24T13:30:40
#
#-------------------------------------------------
QT+= core gui

TARGET = another
TEMPLATE = app

SOURCES +=
            main.cpp\mainwindow.cpp

HEADERS+=
            mainwindow.h

FORMS+=
            mainwindow.ui

HEADERS += \
               matlib.h
win32:CONFIG(release, debug|release):  LIBS += -L$$PWD/ -lv4501v
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/ -lv4501vd

这里由于matcom没有用来调试的v4501vd.lib及v4501vd.dll,因此我们把那个d去掉
PS这点灵活应变的能力普通编程人员应该具备的!!!无论干什么事,都是要摸索一番的,哪有那么一帆风顺的)
  1. void MainWindow::on_pushButton_clicked(){   
  2.      Mm m_h,m_data,m_h1,m_data1;   
  3.      initM(MATCOM_VERSION);   
  4.      m_h=winaxes(winId());//这里改成和mfc的m_hWnd相应的 ,书上代码的m_hWnd是vc的 ,qt当然要变通一下
  5.      axesposition(10,10,100,100);   
  6.      double bounddata[4]={0.2*3.1415926,-1,1};   
  7.      Mm mbound;   
  8.      M_VECTOR(mbound,bounddata);   
  9.      title((CL(TM("SIN函数图形"))));   
  10.      xlabel((CL(TM("x"))));   
  11.      ylabel((CL(TM("y"))));   
  12.      set(m_h,(CL(TM("Color")),TM("black")));   
  13.      set(m_h,(CL(TM("Box")),TM("on")));   
  14.      Mm x,y;  
  15.      x=linspace(0,2*pi,100);   
  16.      y=msin(x);   
  17.      m_data=y;   
  18.      plot((CL(m_data),TM("y")));   
  19.      m_h1=winaxes(winId());   
  20.      Mm pos;   
  21.      pos=(BR(240),240,200,200);   
  22.      set(m_h1,TM("RealPosition"),pos);   
  23.      Mm color;   
  24.      color=zeros(1,3);   
  25.      color.r(1)=0;
  26.      color.r(2)=0;
  27.      color.r(3)=0;   
  28.      set(m_h,TM("color"),color);   
  29.      m_data1=randn(1,50);   
  30.      plot((CL(m_data1),TM("b")));   
  31.      double* phandle=NULL;   
  32.      phandle=m_h1.addr();   
  33.      int nrow,ncol;   
  34.      nrow=m_h1.rows();   
  35.      ncol=m_h1.cols();   
  36.      title(CL(TM("当前的图形")));
  37. }
复制代码
        ④在mainwindow.cpp中加入#include "matlib.h" (一定要放在#include "mainwindow.h" #include "ui_mainwindow.h" 之后),加入一个按钮控件,在clicked事件中加入代码如下,这里的例子为《精通Matlab与C C++ 溷合程序设计 第2版》第7章的7.7.2的实例2:

        编译以后得到如下错误(如果你有其他错误的话我就没办法了):
         d:\temp\another\matlib.h:2867: 错误:C2375: “abs”: 重定义;不同的链接
         此错误看字面意思应该是qt自身定义的函数与matlib.h中的函数冲突,于是我选择将matlib.h里所有这种冲突函数注释掉,结果如下:
  1. //#if !defined(_MSC_VER) | (_MSC_VER>=1100)
  2. //m_type DLLI abs(m_type x);
  3. //#endif
  4. //m_type DLLI fix(m_type x);
  5. //m_type DLLI log2(m_type x);
  6. 。。。
  7. ;//m_type DLLI round(m_type x);
  8. //m_type DLLI sign(m_type x);
复制代码
此时再构建则可运行成功,成功后会出现一个正弦图和另一个曲线图

回复

使用道具 举报

发表于 2019-3-19 11:53:59 | 显示全部楼层
厉害了,小弟刚刚发现原来还有一个这么方便的matcom,而我还在玩QtCharts
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-12-22 16:56 , Processed in 0.036213 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表