当前位置: 首页 > news >正文

使用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,&#xff0c;6.5在线安装经常失败&#xff0c;而5.9版本又无法编译64位程序&#xf…...

【Axure高保真原型】树形表格_多选效果

今天和大家分享树形表格_多选效果的原型模板&#xff0c;点击树的箭头可以展开或者收起子节点&#xff0c;点击多选按钮可以选中或取消选择该行以及子级行内容&#xff0c;同时反选父级行内容&#xff0c;父级行内容能根据子级选中的数量自动反选&#xff0c;包括全选、半选和未…...

【Filament】加载obj和fbx模型

1 前言 3D 模型的常用格式主要有 obj、fbx、gltf 等&#xff0c;Filament 中的 filamesh.exe 工具可以将 obj、fbx 格式转换为 filamesh 格式&#xff0c;然后再加载显示。对于 gltf 格式模型&#xff0c;可以通过 ModelViewer 加载显示&#xff0c;这不在本文的讨论范围内。 1…...

[USACO04OPEN] The Cow Lineup

题目描述 约翰的 N &#xff08; 1 ≤ N ≤ 100000 &#xff09; N &#xff08; 1 \leq N \leq 100000 &#xff09; N&#xff08;1≤N≤100000&#xff09; 只奶牛站成了一列。每只奶牛都写有一个号牌&#xff0c;表示她的品种&#xff0c;号牌上的号码在 1 … K &#x…...

软件工具集合

代码文档自动生成工具&#xff1a; Doxygen download 软件分析工具&#xff1a; perf gdb flamegraph 代码量统计&#xff1a; vscode插件&#xff1a;VS Code Counter 代码备注 vsocde插件&#xff1a; Line Note...

C#利用openvino部署PP-TinyPose人体姿态识别

【官方框架地址】 github.com/PaddlePaddle/PaddleDetection 【算法介绍】 关键点检测算法往往需要部署在轻量化、边缘端设备上&#xff0c;因此长期以来都存在一个难题&#xff1a;精度高、速度则慢、算法体积也随之增加。而PP-TinyPose的出世彻底打破了这个僵局&#xff0c…...

MindSpore Serving与TGI框架 の 对比

一、MindSpore Serving MindSpore Serving是一款轻量级、高性能的服务工具&#xff0c;帮助用户在生产环境中高效部署在线推理服务。 使用MindSpore完成模型训练>导出MindSpore模型&#xff0c;即可使用MindSpore Serving创建该模型的推理服务。 MindSpore Serving包含以…...

两阶段提交协议三阶段提交协议

两阶段提交协议 分布式事务是指会涉及到操作多个数据库的事务,在分布式系统中&#xff0c;各个节点之间在物理上相互独立&#xff0c;通过网络进行沟通和协调。 XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范&#xff08;即接口函数&#xff09;&#xff0c;交易…...

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不能用&#xff0c;必须自己手动安装&#xff08;3.4.3版本 php 7.3&#xff09; 1 步骤&#xff1a; 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目录下的文件&#xff0c;可以看到&#xff0c;和junit有关的导入都飘红&#xff0c;但明明junit已经被正确导入进了项目中。 再看右侧的Maven的依赖下方&#xff0c;junit的右边有一个很不起眼的(test) 这是因为junit作为测试框架&#xff0c;可能包含仅适用于…...

docker 在线安装mysql 8.0.21版本

1、拉取mysql 8.0.21版本镜像 2、查看镜像 docker images 3、在宿主机 /usr/local/mysql 下的 conf 文件夹下&#xff0c;创建 my.cnf 文件&#xff0c;并编辑内容 [mysql] default-character-setutf8 [client] port3306 default-character-setutf8 [mysqld] port3306 se…...

WPF DatePicker与Calendar的使用和样式修改

什么是DatePicker&#xff0c;Calendar Calendar&#xff1a;日历&#xff08;显示年月日视图控件&#xff09;DatePicker&#xff1a;日期选择器&#xff08;是一个更小的控件&#xff0c;点击控件时才会弹出一个日历&#xff09; Calendar使用 常用属性 DisplayMode&#…...

从0开始python学习-40.通过正则表达式/json进行接口关联

目录 1. 正则表达式&#xff1a;使用re库&#xff08;需安装-pip install re&#xff09;&#xff0c;只能提取字符串的数据。 1.1 re.seach&#xff1a;提取一个值&#xff0c;得到的是一个对象&#xff0c;通过下标group(1)取值&#xff0c;如果没有匹配到值则返回None 1.…...

【React系列】高阶组件

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 高阶组件 1.1. 认识高阶组件 什么是高阶组件呢&#xff1f;相信很多同学都听说过&#xff0c;也用过 高阶函数&…...

听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开发工具的入口文件&#xff0c;其作用是提供Clippy开发过程中所需的功能和工具。Clippy是一个Rust代码的静态分析工具&#xff0c;用于提供各种有用的代码规范、编…...

.NET C# 如何获取object对象的数据

如何获取object对象的数据 在DAL层&#xff0c;一般会封装一些返回值&#xff0c;返回的类型就会为object &#xff0c;但是需要其中的值进行判断 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&#xff08;修改 Spring Boot 的 JDK 版本同理&#xff09; 从上面的 Spring Boot 官网的截图中可以发现&#xff0c;自…...

游戏服务器整体架构思考

1.启动层 不管是单体架构还是微服务架构&#xff0c;其实服务器本身都是要启动的。 不管是用grpc实现远程调用&#xff0c;还是dubbo&#xff0c;还是说就一个简单的tcp监听&#xff0c;都是要启动的。 启动的时候&#xff0c;肯定要整合下controller接入层&#xff0c;不管是叫…...

labelme 标注的数据集转化为Mask-Rcnn适用的数据集

labelme 标注的数据集转化为Mask-Rcnn适用的数据集 食用步骤 1.labelme标注数据时&#xff0c;将生成的json文件和原图保存在一起 2.只需提供labelme生成的数据的文件夹&#xff0c;和maskrcnn的数据集文件夹&#xff0c;运行代码就会自动进行处理 3.代码会在提供的maskrcn…...

x-cmd pkg | tig - git 文本模式界面

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 tig 由 Jonas Fonseca 于 2006 年使用 C 语言创建的 git 交互式文本命令行工具。旨在开启交互模式快速浏览 git 存储库的信息以及 git 命令的运行。 首次用户 使用 x tig 即可自动下载并使用 在终端运行 eval "…...

信息论与编码期末复习——概念论述简答题(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…...

[Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目

前面讲解了通过命令行方式来部署k8s项目,下面来讲讲通过腾讯云TKE来快速创建Pod、Deployment、Service部署k8s项目,云平台搭建Kubernetes可参考[Kubernetes]1.Kubernetes(K8S)介绍,基于腾讯云的K8S环境搭建集群以及裸机搭建K8S集群 一.通过腾讯云TKE创建集群 1.创建集群 参考上…...

二叉排序树的创建、插入、查找和删除【数据结构】

二叉排序树 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它根结点的值。若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它根结点的值。它的左、右树又分为⼆叉排序树 二叉排序树也叫二叉查找树、二叉搜索树 二叉排序树的创建、插入、查找和删除 …...

【管理篇 / 恢复】❀ 07. macOS下用命令刷新固件 ❀ FortiGate 防火墙

【简介】随着苹果电脑的普及&#xff0c;很多管理员都会通过苹果电脑对飞塔防火墙进行管理。当防火墙需要命令状态下刷新固件时&#xff0c;在macOS下用命令刷新固件&#xff0c;将会是一个小小的挑战。 首先是硬件的连接&#xff0c;USB配置线的USB一头&#xff0c;接入MAC的U…...

工作纪实40-使用redis的几种姿势

线上查问题看某个redis的key值&#xff0c;记录一下 1.直接使用telnet进行连接&#xff08;贼拉方便&#xff09; telnet ip port > auth pwd1.模糊查询 scan 0 MATCH abc* 2.查看所有key keys * 3.ttl key 查看key的ttl2.使用redis-cli连接(费劲吧啦&#xff0c;还需要本地…...

修改 docker /dev/shm 的大小

修改 docker /dev/shm 的大小 1&#xff0c;获取完整id&#xff1a; docker inspect 245| grep Id rootlynxi:~# docker inspect 245| grep Id"Id": "245ab167ed9a79873b31b3a38df2053870fe72f267c3c1a660df25c63e37e88b",2&#xff0c;修改 ShmSize&…...

【观察】Aginode安捷诺:坚守“长期主义”,服务中国数字经济

毫无疑问&#xff0c;随着整个社会加速数字化转型&#xff0c;尤其是5G、人工智能、大数据等技术兴起&#xff0c;以及智慧医疗、智慧金融、智能制造等应用加速落地&#xff0c;算力网络在经济社会发展中扮演了愈来愈重要的角色&#xff0c;成为支撑数字经济蓬勃发展的“新引擎…...

HttpClient库与代理IP在爬虫程序中的应用

目录 前言 一、HttpClient库的基本使用方法 二、代理IP的使用方法 三、代理IP池的使用方法 四、总结 前言 在编写爬虫程序时&#xff0c;我们经常会使用HttpClient库来发送HTTP请求&#xff0c;获取网页内容。然而&#xff0c;有些网站可能会对频繁的请求进行限制&#x…...

C#最佳工具集合:IDE、分析、自动化工具等

C#是企业中广泛使用的编程语言&#xff0c;特别是那些依赖微软的程序语言。如果您使用C#构建应用程序&#xff0c;则最有可能使用Visual Studio&#xff0c;并且已经寻找了一些扩展来对您的开发进行管理。但是&#xff0c;这个工具列表可能会改变您编写C#代码的方式。 C#编程的…...

秦皇岛网站关键词/百度手机版网址

如题&#xff0c;redis是采用了ziplist 元素在不足一定数量时采用压缩存储 hash: zset: list: 如上图所示&#xff1a; ziplist-entries&#xff1a;最大元素数量&#xff08;即存储了多少个元素&#xff09; ziplist-value&#xff1a;最大存储空间 Kb 以hash-max-ziplist-en…...

全渠道运营平台系统/鞍山seo优化

ImagePicker 项目地址&#xff1a;Lichenwei-Dev/ImagePicker 简介&#xff1a;高仿微信图片选择器&#xff08;支持单图&#xff0c;多图&#xff0c;视频选择&#xff0c;支持图片自由缩放&#xff0c;视频播放等功能&#xff09; 更多&#xff1a;作者 提 Bug 标签…...

wordpress xstore/徐州seo管理

这是一款jquery全屏响应式淡入淡出效果轮播图插件。该轮播图插件简单实用&#xff0c;兼容ie8浏览器&#xff0c;可以自动切换播放&#xff0c;带淡入淡出的动画效果。使用方法在页面中引入jquery和jquery.flexslider-min.js文件。HTML结构实用一个作为轮播图的容器&#xff0c…...

青岛建站费用/福州360手机端seo

Mask RCNN基于Faster RCNN改进&#xff0c;所以若有看不懂的地方可以先去看看我上篇博客Faster R-CNN整体介绍及部分细节讲解 论文全称&#xff1a;Mask R-CNN 目录一、整体总结1. general notes2. 整体架构二、论文细节三、RoI Pool和RoI Align一、整体总结 1. general notes…...

黑龙江省机场建设集团官网网站/软文客

前言: 搞java开发的时候突然对网络产生了兴趣,兜兜转转最终还是再次学习起了大二时候经常不听课自学的网络原理. 参考视频是慕课网上的 一站式学习Java网络编程 全面理解BIO/NIO/AIO 第二章 与 剑指Java面试-Offer直通车 第二章. 目录 第一章 网络基础知识 1.1 七层网络协议…...

如何在网上建设一个公司网站/今日的最新新闻

1、什么是ingress ngress&#xff08;在kubernetes v1.1时添加&#xff09;暴露从集群外到集群内服务的HTTP或HTTPS路由。定义在ingress资源上的规则控制流量的路由。 internet|[ Ingress ]--|-----|--[ Services ] 一个ingress可以配置用于提供外部可访问的服务url、负载均衡…...