使用qtquick调用python程序
一. 内容简介
使用qtquick调用python程序
二. 软件环境
2.1vsCode
2.2Anaconda
version: conda 22.9.0
2.3pytorch
安装pytorch(http://t.csdnimg.cn/GVP23)
2.4QT 5.14.1
新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序,所以就采用5.14.1这个用的比较多也比较稳定的一个版本。
QT编译器采用的是MSVC2017 64bit。
链接:https://pan.baidu.com/s/1ER98DPAkTUPlIyCC6osNNQ?pwd=1234
三.主要流程
3.1 qml中调用c++程序
qml里面不能直接调用python,有那个调命令行然后执行py文件的,我感觉很奇怪,就没用那种方式,就采用c++调用python程序。
首先创建一个c++类,基于QObject对象,名字随便起,我用的是mopsopy,

完成以后,可以直接在我的模板上面改,就是需要在类的成员上加一些声明,让qml认识,但是变量的那个可以用alt加enter加出来,我的没有那个选项,你们可以直接用用我的模板
头文件
#ifndef MOPSOPY_H
#define MOPSOPY_H#include <QObject>
#include <QDate>
#include <QtQml>
#include <QDebug>class MopsoPy : public QObject
{Q_OBJECT// 用于qml内部识别Q_PROPERTY(QString name READ getName WRITE setName NOTIFY nameChanged)
public:explicit MopsoPy(QObject *parent = nullptr);~MopsoPy();QString getName() const;void setName(const QString &name);Q_INVOKABLE void func();
signals:void nameChanged(QString name);
public slots:private:QString name;
};#endif // MOPSOPY_H
cpp文件
#include "mopsopy.h"MopsoPy::MopsoPy(QObject *parent) : QObject(parent)
{
}MopsoPy::~MopsoPy()
{}QString MopsoPy::getName() const
{return name;
}void MopsoPy::setName(const QString &name)
{if (this->name == name)return;this->name = name;emit nameChanged(this->name);
}void MopsoPy::func()
{
}
完事后,要在main.cpp中注册一下,头文件别忘记了加
#include "mopsopy.h"qmlRegisterType<MopsoPy>("MopsoPy", 1, 0, "MopsoPy");
qml文件中使用,测试代码自己写吧
import MopsoPy 1.0MopsoPy{id: mopsoPy;name: "jjjj"Component.onCompleted: {mopsoPy.func()}}
3.2 c++调用python
首先,添加库的地址,换成自己的
INCLUDEPATH+=D:\Anaconda3\include #pythonenviroment
LIBS+=-LD:\Anaconda3\libs
-l_tkinter
-lpython3
-lpython39
qt里面创建python文件,
import numpy as np
def add(a,b):# 创建日志文件fileLog = open("log.txt", "w")arr1 = np.array([1, 2, 3, 4, 5])# 写入日志fileLog.write(np.array2string(arr1))# 写入日志fileLog.write("写入完成")# 关闭文件fileLog.close()return a+b
c++方法实现
头文件
// 不加会关键字重复,报错
#undef slots
#include <Python.h>
#define slots Q_SLOTS
cpp文件这么写
void MopsoPy::func()
{// 新建一个元组,用来存放函数参数的值if( !Py_IsInitialized()){ Py_Initialize();}// 导入 Python 模块PyObject* pModule = PyImport_ImportModule("ccc");// 获取模块中的函数对象PyObject* pFunc = PyObject_GetAttrString(pModule, "add");// 创建参数元组PyObject* pArgs = PyTuple_New(2);int num1 = 42;int num2 = 13;// 这个i对应不同的数据格式PyObject* arg1 = Py_BuildValue("i", num1);PyObject* arg2 = Py_BuildValue("i", num2);PyTuple_SetItem(pArgs, 0, arg1);PyTuple_SetItem(pArgs, 1, arg2);// 调用函数并获取返回值PyObject* pResult = PyObject_CallObject(pFunc, pArgs);// 解析返回值double result;PyArg_Parse(pResult, "d", &result);// 打印结果printf("Result: %f\n", result);// 释放资源Py_DECREF(pModule);Py_DECREF(pFunc);Py_DECREF(pArgs);Py_DECREF(pResult);Py_Finalize();
}
最后把文件放到要执行的文件里面,不然会报找不到文件的,放到release里面就行(我用多个release编译的),我外面也扔了一个,
结果,另外两个不用管,是我的其他模块出的。

3.3 调用复杂的python程序,读取神经网络
后面更新
四.参考
https://blog.51cto.com/wangjichuan/5691185(Qt调用Python详细过程)
相关文章:
使用qtquick调用python程序
一. 内容简介 使用qtquick调用python程序 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3pytorch 安装pytorch(http://t.csdnimg.cn/GVP23) 2.4QT 5.14.1 新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序…...
【Axure高保真原型】树形表格_多选效果
今天和大家分享树形表格_多选效果的原型模板,点击树的箭头可以展开或者收起子节点,点击多选按钮可以选中或取消选择该行以及子级行内容,同时反选父级行内容,父级行内容能根据子级选中的数量自动反选,包括全选、半选和未…...
【Filament】加载obj和fbx模型
1 前言 3D 模型的常用格式主要有 obj、fbx、gltf 等,Filament 中的 filamesh.exe 工具可以将 obj、fbx 格式转换为 filamesh 格式,然后再加载显示。对于 gltf 格式模型,可以通过 ModelViewer 加载显示,这不在本文的讨论范围内。 1…...
[USACO04OPEN] The Cow Lineup
题目描述 约翰的 N ( 1 ≤ N ≤ 100000 ) N ( 1 \leq N \leq 100000 ) N(1≤N≤100000) 只奶牛站成了一列。每只奶牛都写有一个号牌,表示她的品种,号牌上的号码在 1 … K &#x…...
软件工具集合
代码文档自动生成工具: Doxygen download 软件分析工具: perf gdb flamegraph 代码量统计: vscode插件:VS Code Counter 代码备注 vsocde插件: Line Note...
C#利用openvino部署PP-TinyPose人体姿态识别
【官方框架地址】 github.com/PaddlePaddle/PaddleDetection 【算法介绍】 关键点检测算法往往需要部署在轻量化、边缘端设备上,因此长期以来都存在一个难题:精度高、速度则慢、算法体积也随之增加。而PP-TinyPose的出世彻底打破了这个僵局,…...
MindSpore Serving与TGI框架 の 对比
一、MindSpore Serving MindSpore Serving是一款轻量级、高性能的服务工具,帮助用户在生产环境中高效部署在线推理服务。 使用MindSpore完成模型训练>导出MindSpore模型,即可使用MindSpore Serving创建该模型的推理服务。 MindSpore Serving包含以…...
两阶段提交协议三阶段提交协议
两阶段提交协议 分布式事务是指会涉及到操作多个数据库的事务,在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。 XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易…...
6-Docker Compose-tomcat application(指定官方镜像)
1.创建docker-compose.yml文件,添加如下内容并保存 vim docker-compose.yml [root@centos79 ~]# cat docker-compose.yml #yml文件 version: 3 #版本号,默认为3 services:tomcat-ztj: #定…...
宝塔安装的imagemagick不能用,必须自己手动安装
1 安装 用composer安装 2 宝塔安装的imagemagick不能用,必须自己手动安装(3.4.3版本 php 7.3) 1 步骤: wget https://pecl.php.net/get/imagick-3.4.3.tgz tar -zxf imagick-3.4.3.tgz cd imagick-3.4.3 /www/server/php/73…...
解决在test以外的目录下导入junit无效
以上引用来自src目录下的文件,可以看到,和junit有关的导入都飘红,但明明junit已经被正确导入进了项目中。 再看右侧的Maven的依赖下方,junit的右边有一个很不起眼的(test) 这是因为junit作为测试框架,可能包含仅适用于…...
docker 在线安装mysql 8.0.21版本
1、拉取mysql 8.0.21版本镜像 2、查看镜像 docker images 3、在宿主机 /usr/local/mysql 下的 conf 文件夹下,创建 my.cnf 文件,并编辑内容 [mysql] default-character-setutf8 [client] port3306 default-character-setutf8 [mysqld] port3306 se…...
WPF DatePicker与Calendar的使用和样式修改
什么是DatePicker,Calendar Calendar:日历(显示年月日视图控件)DatePicker:日期选择器(是一个更小的控件,点击控件时才会弹出一个日历) Calendar使用 常用属性 DisplayMode&#…...
从0开始python学习-40.通过正则表达式/json进行接口关联
目录 1. 正则表达式:使用re库(需安装-pip install re),只能提取字符串的数据。 1.1 re.seach:提取一个值,得到的是一个对象,通过下标group(1)取值,如果没有匹配到值则返回None 1.…...
【React系列】高阶组件
本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 高阶组件 1.1. 认识高阶组件 什么是高阶组件呢?相信很多同学都听说过,也用过 高阶函数&…...
听GPT 讲Rust源代码--src/tools(38)
File: rust/src/tools/clippy/clippy_dev/src/lib.rs rust/src/tools/clippy/clippy_dev/src/lib.rs文件是Clippy开发工具的入口文件,其作用是提供Clippy开发过程中所需的功能和工具。Clippy是一个Rust代码的静态分析工具,用于提供各种有用的代码规范、编…...
.NET C# 如何获取object对象的数据
如何获取object对象的数据 在DAL层,一般会封装一些返回值,返回的类型就会为object ,但是需要其中的值进行判断 public static object SaveFileIns(string filepath){return new { path pathlist, file_name fileNamelist, Message "…...
使用IDEA创建使用 JDK8 的 2.x.x 版本的 Spring Boot 项目以及 Spring Boot 项目如何修改JDK版本
目录 一、在阿里云上官网上创建项目 二、将 IDEA 中创建项目的源地址修改为阿里云官网 三、创建 3.x.x 的项目之后修改配置降低至 2.7.x 版本和使用 JDK8(修改 Spring Boot 的 JDK 版本同理) 从上面的 Spring Boot 官网的截图中可以发现,自…...
游戏服务器整体架构思考
1.启动层 不管是单体架构还是微服务架构,其实服务器本身都是要启动的。 不管是用grpc实现远程调用,还是dubbo,还是说就一个简单的tcp监听,都是要启动的。 启动的时候,肯定要整合下controller接入层,不管是叫…...
labelme 标注的数据集转化为Mask-Rcnn适用的数据集
labelme 标注的数据集转化为Mask-Rcnn适用的数据集 食用步骤 1.labelme标注数据时,将生成的json文件和原图保存在一起 2.只需提供labelme生成的数据的文件夹,和maskrcnn的数据集文件夹,运行代码就会自动进行处理 3.代码会在提供的maskrcn…...
插件管理终极指南:从入门到精通的全方位策略
插件管理终极指南:从入门到精通的全方位策略 【免费下载链接】Magpie An all-purpose window upscaler for Windows 10/11. 项目地址: https://gitcode.com/gh_mirrors/mag/Magpie 为什么80%的用户都没用对插件功能?在开源工具Magpie的使用过程中…...
YimMenu终极指南:5大核心功能打造安全的GTA5增强体验
YimMenu终极指南:5大核心功能打造安全的GTA5增强体验 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMe…...
STM32F103R6数码管时钟实战:从Proteus仿真到按键调校全流程(附源码)
STM32F103R6数码管时钟实战:从Proteus仿真到按键调校全流程(附源码) 在嵌入式系统开发中,数码管显示是最基础也最实用的输出方式之一。本文将带您从零开始,基于STM32F103R6微控制器,构建一个完整的六位数码…...
AT32F403A开发板8个串口全开实战:用V2库实现多路数据同时收发(附完整代码)
AT32F403A开发板8串口全开实战:工业级多通道通信架构设计 在工业自动化、智能仓储和物联网网关等场景中,经常需要同时对接多个传感器、执行器或通信模块。传统方案往往采用多个MCU协同工作或外加串口扩展芯片,而AT32F403AVGT7凭借其原生8个串…...
NumPy 应用实例:用户行为数据分析(归一化和标准化处理)
在用户行为分析中,常常需要同时处理多个特征,例如访问次数、消费金额、停留时长、收藏数量等。这些特征虽然都能反映用户活跃程度或消费倾向,但它们的单位、量纲和取值范围通常并不一致。如果直接将原始数据用于综合评分或相似度计算…...
人形机器人强化学习实战:从奖励设计到PPO算法优化
1. 人形机器人强化学习入门:为什么奖励设计是关键 第一次接触人形机器人强化学习时,我被一个简单问题困扰了很久:为什么同样的算法,换个任务就要重新调参?后来发现问题的核心在于奖励函数设计。就像教小孩学走路&#…...
电子工程师的技术洁癖与嵌入式开发实践
1. 电子工程师的职业习惯与技术洁癖 1.1 工程师的强迫症表现 在电子工程领域,许多从业者都表现出典型的"技术洁癖"特征。这种职业习惯主要体现在以下几个方面: 元器件布局强迫症 :PCB板上电阻、电容等元件的焊盘必须对齐&#x…...
MS5803-14BA I²C驱动开发:嵌入式压力传感器实战指南
1. MS5803-14BA压力传感器库深度解析:面向嵌入式工程师的IC驱动开发实践1.1 传感器核心特性与工程定位MS5803-14BA是TE Connectivity(原Measurement Specialties)推出的高精度数字压力/温度复合传感器,采用MEMS压阻式传感原理与Δ…...
Rufus高效启动盘制作实战攻略:30分钟从入门到精通
Rufus高效启动盘制作实战攻略:30分钟从入门到精通 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 系统重装难题如何高效解决? 当你的电脑遭遇系统崩溃、病毒入侵或需要全…...
open_clip多模态模型实战指南:从技术原理到产业落地
open_clip多模态模型实战指南:从技术原理到产业落地 【免费下载链接】open_clip An open source implementation of CLIP. 项目地址: https://gitcode.com/GitHub_Trending/op/open_clip 核心价值:为什么选择open_clip? 在当今AI应用…...
