PythonQt进阶
本文介绍PythonQt和qt之间是如何进行交互操作的
例子是以Qt的TreeView为实例进行介绍
在该例子中,TreeItem不是从Qt中进行的继承,这样的类如果要和Python进行交互,首先需要对其进行封装,
class TreeItemWrapper : public QObject {
Q_OBJECT
public Q_SLOTS:
TreeItem* new_TreeItem(const QList<QVariant> &data, TreeItem *parentItem) { return new TreeItem(data, parentItem); }
void appendChild(TreeItem *o, TreeItem *child) { o->appendChild(child); }
TreeItem *child(TreeItem *o,int row) { return o->child(row); }
int childCount(TreeItem *o) const { return o->childCount(); }
int columnCount(TreeItem *o) const { return o->columnCount(); }
QVariant data(TreeItem *o, int column) const { return o->data(column); }
int row(TreeItem *o) const{ return o->row(); }
TreeItem *parentItem(TreeItem *o){ return o->parentItem(); }
};
然后TreeModel虽然是从QObject中继承,但是我们定义了扩展函数,鉴于此,需要实现一个中间类,将新方法添加到Python中:
class PyDecorators : public QObject
{
Q_OBJECT public Q_SLOTS:
TreeItem *RootItem(TreeModel* obj) { return obj->RootItem(); }
};
然后使用以下代码将,Qt和Python进行关联
PythonQt::init();
PythonQtObjectPtr mainModule = PythonQt::self()->getMainModule();
PythonQt::self()->addDecorators(new PyDecorators());
PythonQt::self()->registerCPPClass("TreeItem","","example", PythonQtCreateObject<TreeItemWrapper>);
mainModule.addObject("model", model);
mainModule.evalFile(":GettingStarted.py");
GettingStarted.py代码如下
from PythonQt import *
from PythonQt.example import TreeItem rootItem = model.RootItem(); item = TreeItem(("a", "b"), rootItem);
item1 = TreeItem(("c", "d"), item);
item2 = TreeItem(("e", "f"), item1); item1.appendChild(item2);
item.appendChild(item1);
rootItem.appendChild(item);
以上。
原文地址:http://www.cnblogs.com/zhangzhiming/p/5409284.html
技术分享QQ群:527698177 (限四川地区)
PythonQt进阶的更多相关文章
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)
后记: 由于自己low,没有下载罪行的python3.2导致编译上遇到种种问题,后文可以参考,建议看: <Windows7 VS2015 下编译 PythonQt3.2> https:// ...
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索
时间:2018年10月20日 笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限, ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- nodejs进阶(4)—读取图片到页面
我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...
- JavaScript进阶之路(一)初学者的开始
一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...
- nodejs进阶(3)—路由处理
1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...
- nodejs进阶(5)—接收请求参数
1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...
- nodejs进阶(1)—输出hello world
下面将带领大家一步步学习nodejs,知道怎么使用nodejs搭建服务器,响应get/post请求,连接数据库等. 搭建服务器页面输出hello world var http = require ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
随机推荐
- 布尔值运算&集合
示例:返回booleanli = [] li = {} li = () if not li: print(1) radiansdict.has_key(key) #如果键在字典dict里返回true, ...
- 网卡虚拟化技术:VMDq和SR-IOV
通常情况下,一个服务器上跑几十个虚机,对计算和网络的需求是很惊人的.前者促生了当下的多核技术发展,后者则不能简单的用多网卡来实现.试想,每个虚机如果都需要10G的交换能力,服务器要配置几十块物理网卡, ...
- 并发工具类(一)等待多线程的CountDownLatch
前言 JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...
- Python之部分基础知识点汇总
1.三元运算(又称三目运算) 三元运算(又称三目运算),简单条件语句的简写 if a<b: A else: B等价于:A if a<b else B 2.
- mock单测
mockMvc执行流程总结: 整个过程:1.mockMvc.perform执行一个请求:2.MockMvcRequestBuilders.get("/user/1")构造一个请求3 ...
- https Configure a Spring Boot app for HTTPS on Amazon AWS.
参考: https://geocolumbus.github.io/HTTPS-ELB-AWS-Spring-Boot/ 1. 在服务器端配置 证书 域名 映射 2. 导入依赖: <depe ...
- cnapckSurround c++builder Region 代码折叠快捷键
C++Builder代码折叠 cnapckSurround c++builder Region 代码折叠快捷键,可以导入导出,IDE code edit,cnpack menu surround wi ...
- 基于OpenGL编写一个简易的2D渲染框架-05 渲染文本
阅读文章前需要了解的知识:文本渲染 https://learnopengl-cn.github.io/06%20In%20Practice/02%20Text%20Rendering/ 简要步骤: 获 ...
- MFC-Dialog各函数的执行顺序
CDlgTestDlg::CDlgTestDlg CDlgTestDlg::DoModal CDialog::DoModal CDlgTestDlg::PreSubclassWindow CDlgTe ...
- 认识serviceLoader
最近在研究系统设计方面的东西,发现有很多通用的解决方案,包括spring配置扩展以及serviceLoader的应用,这里简单记录下serviceLoader的简单应用,网上例子很多,大同小异,本人觉 ...