- UID
- 2
- 精华
- 积分
- 7736
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
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这点灵活应变的能力普通编程人员应该具备的!!!无论干什么事,都是要摸索一番的,哪有那么一帆风顺的)- void MainWindow::on_pushButton_clicked(){
- Mm m_h,m_data,m_h1,m_data1;
- initM(MATCOM_VERSION);
- m_h=winaxes(winId());//这里改成和mfc的m_hWnd相应的 ,书上代码的m_hWnd是vc的 ,qt当然要变通一下
- axesposition(10,10,100,100);
- double bounddata[4]={0.2*3.1415926,-1,1};
- Mm mbound;
- M_VECTOR(mbound,bounddata);
- title((CL(TM("SIN函数图形"))));
- xlabel((CL(TM("x"))));
- ylabel((CL(TM("y"))));
- set(m_h,(CL(TM("Color")),TM("black")));
- set(m_h,(CL(TM("Box")),TM("on")));
- Mm x,y;
- x=linspace(0,2*pi,100);
- y=msin(x);
- m_data=y;
- plot((CL(m_data),TM("y")));
- m_h1=winaxes(winId());
- Mm pos;
- pos=(BR(240),240,200,200);
- set(m_h1,TM("RealPosition"),pos);
- Mm color;
- color=zeros(1,3);
- color.r(1)=0;
- color.r(2)=0;
- color.r(3)=0;
- set(m_h,TM("color"),color);
- m_data1=randn(1,50);
- plot((CL(m_data1),TM("b")));
- double* phandle=NULL;
- phandle=m_h1.addr();
- int nrow,ncol;
- nrow=m_h1.rows();
- ncol=m_h1.cols();
- title(CL(TM("当前的图形")));
- }
复制代码 ④在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里所有这种冲突函数注释掉,结果如下:- //#if !defined(_MSC_VER) | (_MSC_VER>=1100)
- //m_type DLLI abs(m_type x);
- //#endif
- //m_type DLLI fix(m_type x);
- //m_type DLLI log2(m_type x);
- 。。。
- ;//m_type DLLI round(m_type x);
- //m_type DLLI sign(m_type x);
复制代码 此时再构建则可运行成功,成功后会出现一个正弦图和另一个曲线图
|
|