Qt链接anaconda动态库详细过程

Qt链接anaconda动态库

1.创建Qt项目

1.1双击打开Qt Creator

在这里插入图片描述

1.2点击新建项目

请添加图片描述

1.3(如图)

请添加图片描述

请添加图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注意:一定要选择64位的!!!!!!

1.4项目创建成功!

在这里插入图片描述

2.添加anaconda库

2.1右键点击项目名,选择添加库(add library)

在这里插入图片描述

2.2选择添加外部库

因为anaconda是外部库,所以选择添加外部库

在这里插入图片描述

2.3选择库的路径

2.3.1选择库文件路径

在这里插入图片描述
在这里插入图片描述

所谓库文件(Library file),就是anaconda安装位置的libs文件夹下的.lib文件

此时要注意的是,当库文件路径选择好后,会自动生成包含路径,但是正确的包含路径并不是它给出的这条路径,因此,我们必须重新选择包含路径,而不是使用它自动产生的。
在这里插入图片描述

2.3.2选择包含路径

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这样就正确了,然后再取消一些选项
在这里插入图片描述

2.3.3点击下一步
在这里插入图片描述
在这里插入图片描述

最终,生成如下代码:

win32:CONFIG(release, debug|release): LIBS += -LD:/installQudong/anaconda2/libs/ -lpython39
else:win32:CONFIG(debug, debug|release): LIBS += -LD:/installQudong/anaconda2/libs/ -lpython39d

INCLUDEPATH += D:/installQudong/anaconda2/include
DEPENDPATH += D:/installQudong/anaconda2/include

到这一步,conda库已经添加完成

2.4运行该项目

选择release,64位,运行(一定要这么选,否则运行失败!!!)
在这里插入图片描述
在这里插入图片描述

运行成功!

3.测试

3.1在widget.h中额外添加头文件

#include <QDebug>
#undef slots
#include <Python.h>
#define slots Q_SLOTS
using namespace std;

3.2在widget.cpp文件

在该文件的构造函数中添加如下代码:

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //设置环境变量
    Py_SetPythonHome(L"D:\\installQudong\\anaconda2");

    //Python初始化
    Py_Initialize();
    if( !Py_IsInitialized() )
        qDebug()<<"初始化失败";

    //导入sys模块设置模块地址
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");


    //创建模块指针
    PyObject* pModule = PyImport_ImportModule("Py_Module");
    if (!pModule)
        qDebug()<<"获取模块指针失败";

    //创建函数指针
    PyObject* pFunc= PyObject_GetAttrString(pModule,"add");
    if(!pFunc)
        qDebug()<<"获取函数指针失败";

    //创建函数参数
    PyObject* args = PyTuple_New(2);        // 2个参数
    PyObject* arg1 = PyLong_FromLong(4);    // 参数一设为4
    PyObject* arg2 = PyLong_FromLong(3);    // 参数二设为3
    PyTuple_SetItem(args, 0, arg1);
    PyTuple_SetItem(args, 1, arg2);

    //调用Python函数,传入元组参数pPara
    PyObject *FuncBack = PyObject_CallObject(pFunc,args);
    //PyObject_CallObject(pFunc,nullptr); //无参数调用

    //FuncBack是返回值指针,转换获取返回值
    int res = 0;
    PyArg_Parse(FuncBack,"i",&res);
    qDebug()<<"返回值: "<<res;

    //调用结束,销毁
    Py_Finalize();

}

3.3在工程文件下新建.py文件

在这里插入图片描述

文件的内容如下:

def add(a, b):
    return a + b

3.4将新建的.py文件复制

粘贴到节2.4中,运行项目时生成的文件夹中的release文件夹下

在这里插入图片描述

3.5再次运行该项目

返回正确的结果,运行成功!

3.4将新建的.py文件复制

粘贴到节2.4中,运行项目时生成的文件夹中的release文件夹下

在这里插入图片描述

3.5再次运行该项目

在这里插入图片描述

返回正确的结果,运行成功!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值