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> ...
随机推荐
- RAID5---块,条带,校验,旋转,同步/异
冗余(奇偶校验)块:RAID5中在同一个条带中用一个块来存放冗余信息,冗余信息示其他块的"异或"值,这样在同一条带中就只有(n-1)个块是实际的数据,所以RAID5中阵列容量是(n ...
- InterlliJ IDEA 2017.3.x / 2017.3.4 License Server激活
InterlliJ IDEA 2017.3.x / 2017.3.4 License Server激活 1.Lincense Server激活 // 激活IDEA的License Server 地址 ...
- 20165233 2017-2018-2 《Java程序设计》第九周学习总结
20165233 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 基础 - URL类:java.net包中的URL类是对统一资源定位符的抽象,使用URL创建对 ...
- MPI Hello World
▶<并行程序设计导论>第三章(用 MPI 进行分布式内存编程)的第一个程序样例. ● 代码 #include <stdio.h> #include <string.h& ...
- jQuery ajax - serializeArray() 方法
定义和用法 serializeArray() 方法通过序列化表单值来创建对象数组(名称和值). 您可以选择一个或多个表单元素(比如 input 及/或 textarea),或者 form 元素本身. ...
- Struts2:No result defined for action com.yibai.user.action.LoginAction and result input
转自:https://zhidao.baidu.com/question/133574016.html 1 String 里面有5个static 常量分别是: ERROR INPUT LOGIN NO ...
- myeclipse配置gradle插件
首先,到Gradle官网下载最新版的gradle,已经到了2.13了 下载地址是 http://gradle.org/gradle-download/ 下载下来解压到任意目录 然后配置Windows环 ...
- 前端-javascript-DOM(重点)文档对象模型
1.DOM概念-文档对象模型 // 什么是DOM ? /* Document Object Model 文档对象模型 面向对象: 三个特性 封装 继承 多态 一个对象: 属性和方法 说 万事万物皆对象 ...
- UI5-文档-4.12-Shell Control as Container
现在我们使用shell控件作为应用程序的容器,并使用它作为新的根元素.shell通过在桌面屏幕上引入一个所谓的信箱,来负责应用程序对设备屏幕大小的视觉调整. Preview The app is no ...
- Apache Hive 执行HQL语句报错 ( 10G )
# 故障描述: hive > , ) as uuid, count(distinct(request_body["uuid"])) as count from log_bft ...