本文介绍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进阶的更多相关文章

  1. Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)

    后记: 由于自己low,没有下载罪行的python3.2导致编译上遇到种种问题,后文可以参考,建议看: <Windows7 VS2015 下编译 PythonQt3.2> https:// ...

  2. Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索

    时间:2018年10月20日 笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限, ...

  3. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  4. nodejs进阶(4)—读取图片到页面

    我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

  5. JavaScript进阶之路(一)初学者的开始

    一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...

  6. nodejs进阶(3)—路由处理

    1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

  7. nodejs进阶(5)—接收请求参数

    1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...

  8. nodejs进阶(1)—输出hello world

    下面将带领大家一步步学习nodejs,知道怎么使用nodejs搭建服务器,响应get/post请求,连接数据库等. 搭建服务器页面输出hello world var  http  =  require ...

  9. [C#] 进阶 - LINQ 标准查询操作概述

    LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...

随机推荐

  1. 本地管理表空间和字典管理表空间的特点,ASSM有什么特点

    字典管理表空间(Dictionary-Managed Tablespace简称DMT),8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用. Oracle使用两个字典来 ...

  2. 微软SMB 3.0文件共享协议新特性介绍

    SMB(*nix平台和Win NT4.0又称CIFS)协议是Windows平台标准文件共享协议.Linux平台通过samba来支持.SMB最新版本v3.0,在v2.0基础上针对WAN和分布式有改进.详 ...

  3. distinct group by

    select num from test_test group by num; 比 select distinct(num) from test_test;  效率高 select count(dis ...

  4. webserver有哪些

    http://blog.csdn.net/mfsh_1993/article/details/70245380 常用web服务器有Apache.Nginx.Lighttpd.Tomcat.IBM We ...

  5. node 把前台传来的base64码转成图片存放

    最近做个人网站头像修改用到了,在做头像修改,先做了一个图片切割,只需要上传你选中部分, 如图 这种需求 应该还是会遇到的, http://pan.baidu.com/s/1boVkn1t 这是裁剪图片 ...

  6. MySQL设置快速删除

    SET FOREIGN_KEY_CHECKS=0; DROP DATABASE ... SET FOREIGN_KEY_CHECKS=1;

  7. python 2 类与对象

    1.类与对象的概念 类即类别.种类,是面向对象设计最重要的概念,从一小节我们得知对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体. 那么问题来了,先有的一个个具体存在的对象(比如一 ...

  8. 移动cup

    intel处理器M和U H结尾的有什么具体区别 笔记本CPU 酷睿i 系列U M H详解: U 低压版(低电压-性能消减)最低主频:1.7-1.9GHZ M 准电压(笔记本上的电压标准)最低主频:2. ...

  9. git 拉取某个分支到本地

    git 拉取其实只需要 git fetch origin xxx. git pull origin xxx即可

  10. js中定时器2

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...