Qtcreator中来调用python的函数的用法

2023-11-13

以下内容是参考博客:https://blog.csdn.net/alxe_made/article/details/83382159

由以上大神的博客作为参考成功实现的

一、先说几点注意的地方:

1、就是需要将python的路径在pro中加载进来,这边使用的是绝对路径,因为每个人安装python的安装路径不一样,所以

这个是第一个坑,需要自己去手动修改

2、就是成功引入进来之后,会发现编译的时候还会提示个错误,这个据说是由于信号和槽冲突造成的,具体的就是加上两句代码

来解决

3、非常重要的一个坑,就是你的qt编译加载的运行必须是64位的,因为我这边安装的python就是64位的,所以如果你的qtcreator编译运行不是64位的话,整个程序就可能出现莫名其妙的问题,这是一个非常重要的坑提示

二、开始进行环境的搭建

1、 qtcreator中新建个模板,如下:

2、新建个test_py.py文件夹,可以在qtcreator中通过加载新文件的形式来进行加载进来,最后实现的文件目录如下:

test_py.py中的代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
def hello():
    print("hello world121♪(^∀^●)ノ!")

3、开始在qtcreator的pro中进行加载python的路径 ,如下:

4、在main.cpp中加入代码如下:

#include <QCoreApplication>
#include <Python.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //初始化python模块
    Py_Initialize();
    if ( !Py_IsInitialized() )
    {
    return -1;
    }
    //导入test.py模块
    PyObject* pModule = PyImport_ImportModule("test_py");
    if (!pModule) {
            printf("Cant open python file!\n");
            return -1;
        }
    //获取test模块中的hello函数
   PyObject* pFunhello= PyObject_GetAttrString(pModule,"hello");
    //注释掉的这部分是另一种获得test模块中的hello函数的方法
//    PyObject* pDict = PyModule_GetDict(pModule);
//       if (!pDict) {
//           printf("Cant find dictionary.\n");
//           return -1;
//       }
//    PyObject* pFunhello = PyDict_GetItemString(pDict, "hello");

    if(!pFunhello){
        cout<<"Get function hello failed"<<endl;
        return -1;
    }
    //调用hello函数
    PyObject_CallFunction(pFunhello,NULL);
    //结束,释放python
    Py_Finalize();
   return a.exec();

}

 5、编译的时候出现如下错误:

加上两句代码如下:

 6、再编译发现报错如下:

这个时候,我们就需要将test_py文件放到生成的build中的exe的同级目录下,这样,才能成功找到!

源码中的在不同的电脑中的修改点:1、更改python的路径,2、需要将test_py文件放到build的同级exe的目录下

qt5.13.2+VST017

源码链接:https://download.csdn.net/download/Littlehero_121/12707474

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qtcreator中来调用python的函数的用法 的相关文章

随机推荐

  • 前端面经高频考点

    文章目录 HTML 1 高频1之行内元素 块级元素 行内块元素的区别 2 高频2之script标签中defer和async的区别 3 src和href的区别 4 lable的作用 5 ifram的使用以及有优缺点 6 img的srcset属
  • Java题目练习

    编程题目 题目1 编写MobilePhone类 包含brand 品牌 和price 价格 属性 该类实现Comparable接口规定该类对象大小 即手机能按照价格来排序 2 创建一个只可放 MobilePhone 类的链表 链表当中添加3个
  • geckodriver的安装和测试其是否安装成功

    1 首先下载最新的geckodriver 你可以百度 或者我分享给你 但是如果你看到这篇文的时候 已经更新版本了 你可以去百度一下 总有人在分享的 链接 https pan baidu com s 1L9GLCpLNmgL2szxD6wvK
  • 《科学伦理与学术规范》 课后习题_答案 2022春季

    资料来源网络 侵删 科学伦理与学术规范答案汇总 2022 第一部分 必做 ABC A B D ABCD ABC D A BCD C D D 第二部分 必做 ABCD ABCD ABCD BCD AD A ABCD ACD AC A AC D
  • 了解接口工具Apifox

    最近发现一款接口测试工具 apifox 我我们很难将它描述为一款接口管理工具 或 接口自测试工具 官方给了一个简单的公式 更能说明apifox可以做什么 Apifox Postman Swagger Mock JMeter Apifox的特
  • /usr/bin/ld: cannot find -lmysqlcllient

    文章目录 1 question usr bin ld cannot find lmysqlcllient 2 solution 1 question usr bin ld cannot find lmysqlcllient 2 soluti
  • Unity脚本的属性

    参考官网 http game ceeger com Script Attributes Attributes html http blogs unity3d com 2014 06 24 serialization in unity 参考文
  • 解决UE4启动出现UE4Editor.exe-无法找到dll入口的弹窗

    UE4编辑器启动 一开始遇到的问题如下 上网找问题得到的解答都是在cmd下利用regsvr32 exe注册该dll到注册表 但是也提示报错 上网搜了一下 得知原因是生成该dll的源码没有实现 DllRegisterServer和DllUne
  • 镜像iso文件下载地址

    CentOS 7官方下载地址 https www centos org download Centos国内下载源 以下链接均可下载镜像文件 http man linuxde net download CentOS http centos u
  • 面向对象程序设计语言(Java)-1.概述

    概述 1 Java的两层含义 2 Java语言的特点 3 Java的应用平台 4 Java的工作原理 5 Java环境中的概念 6 初始Java程序 7 Java程序的基本组成 8 开发Java程序的步骤 9 注释 1 Java的两层含义
  • JavaScript中的扁平化数据转换为树形结构、树形结构扁平化数据

    1 扁平化数据 gt 树形结构 1 1 第一种数据类型 原始数据只有id和pId相互关联 let data id 639 name 商品管理 type 0 pId 638 code 1 domain id 640 name 商品分类 typ
  • antdv(vue)组件中tree-select使用

    官网教程 组件tree select 实现效果 1 基本用法 直接使用 在vue层写数据 注意 注册组件要包含treeSelect和其中的节点ATreeSelectNode 不注册会报错 如下
  • Oracle常用代码总结

    1 用户 创建用户 create user dm identified by dm default tablespace BIGDATA DM temporary tablespace DM TEMP profile default 修改用
  • Centos7 搭建 Minikube

    Centos7 搭建 Minikube 目录 Centos7 搭建 Minikube 参考博客 运行环境 安装过程 配置系统环境 安装Docker 安装Kubectl 参考博客 参考博客 运行环境 系统版本 CentOS Linux rel
  • Flutter 页面中添加水印、自定义水印

    最近开发手机APP 使用 Fltter 由于需要使用水印的功能 但是第一次接触Flutter 就想着能不能在网上找到现成的使用 结果全是一群复制粘贴的 还卵用没有 不过由于我太机制 直接去官方的 pub get 找到一个插件 嘿嘿 pub
  • 教你统计日留存、周留存、月留存率更准确的方法。

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 什么是留存用户 某段时间内的新增用户 经过一段时间后 仍继续使用应用的被认作是留存用户 这部分用户占当时新增用户的比例即是留存率 统计留存用户的时间粒度有哪些 自然日 包括
  • C/C++宏编程

    C C 宏编程 宏的复杂使用 永远不要写两次 介绍 我读过的所有C C 教科书都批评宏的使用 不要使用它们 它们很危险 因为它们隐藏了你实际写的东西 尤其是看起来很实用的宏 有些人甚至说 没有理由在C 的模板类的发明中使用宏 尽管如此 宏仍
  • centos7 mysql启动失败_RPM方式安装MySQL

    RPM方式安装MySQL 最近浪子尝试使用mycat做MySQL的读写分离和分表分库 因此搭建了几台虚拟机来做操作 话不多说 我们现在centos7上安装MySQL 据说centos7上面直接用yum的方式安装MySQL会失败 那么我就直接
  • 与或非逻辑符号_数电学习之 逻辑电路(1)

    先导 逻辑图的表示 1 与或非 01 02 03 2 扩展 异或 不同为1 相同为0 和同或 相同为1 不同为0 3 复合运算 与非 与后面加一个小圆圈 或非 或后面加一个小圆圈 与或非 两个与输入到或中 或后面加一个小圆圈 4 逻辑公式
  • Qtcreator中来调用python的函数的用法

    以下内容是参考博客 https blog csdn net alxe made article details 83382159 由以上大神的博客作为参考成功实现的 一 先说几点注意的地方 1 就是需要将python的路径在pro中加载进来