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

郑州的网站建设公司上海网站建设 微信开发公司

郑州的网站建设公司,上海网站建设 微信开发公司,天元建设集团有限公司烟台分公司,360商场内部在 Qt 中#xff0c;C 和 QML 交互一般有如下三种方法 上下文属性#xff1a;setContextProperty( )向引擎注册类型#xff1a;调用 qmlRegisterType( )QML 扩展插件#xff1a;虽然有很大的灵活性#xff0c;但是用 Python 创建 QML 插件比较麻烦#xff0c;所以这种方法… 在 Qt 中C 和 QML 交互一般有如下三种方法 上下文属性setContextProperty( )向引擎注册类型调用 qmlRegisterType( )QML 扩展插件虽然有很大的灵活性但是用 Python 创建 QML 插件比较麻烦所以这种方法不适用于 Python 将 Python 代码暴露给 QML上下文属性 import random import sys from PySide6.QtGui import QGuiApplication from PySide6.QtQml import QQmlApplicationEngine from PySide6.QtCore import QUrl, QObject, Signal, Slotclass NumberGenerator(QObject):def __init__(self):QObject.__init__(self)nextNumber Signal(int, arguments[number])Slot()def giveNumber(self):self.nextNumber.emit(random.randint(0, 99))if __name__ __main__:app QGuiApplication(sys.argv)engine QQmlApplicationEngine()number_generator NumberGenerator()engine.rootContext().setContextProperty(numberGenerator, number_generator)engine.load(QUrl(main.qml))if not engine.rootObjects():sys.exit(-1)sys.exit(app.exec()) import QtQuick 2.14 import QtQuick.Window 2.14 import QtQuick.Controls 2.14Window {id: root width: 640height: 480visible: true title: qsTr(Hello World)Flow {Button {text: qsTr(Give me a number)onClicked: numberGenerator.giveNumber()}Label {id: numberLabeltext: qsTr(no number)}}Connections {target:numberGeneratorfunction onNextNumber(number) {numberLabel.text number}}}上述代码要结合 .py 文件进行理解onClicked发射 clicked 信号会触发槽函数 numberGenerator.giveNumber()该函数会发射 numberGenerator.nextNumber 信号这个信号又被 QML 中的 onNextNumber 捕获并修改 label 的显示结果。 .py 文件使用 setContextProperty() 函数 把 Python 对象 number_generator 暴露给 QML 对应 QML 中的 numberGenerator这种方式会直接添加到 QML 的上下文环境中在QML 中可以直接使用不需要重新导入使用方便但容易导致命名冲突。 这里使用 Slot 装饰符将 giveNumber() 变成槽函数不然无法使用 将 Python 对象暴露给 QML 注册类型 // #region global import QtQuick import QtQuick.Window import QtQuick.Controlsimport GeneratorsWindow {id: rootwidth: 640height: 480visible: truetitle: qsTr(Hello Python World!)Flow {Button {text: qsTr(Give me a number!)onClicked: numberGenerator.giveNumber()}Label {id: numberLabeltext: qsTr(no number)}}NumberGenerator {id: numberGenerator}Connections {target: numberGeneratorfunction onNextNumber(number) {numberLabel.text number}} } // #endregion global#region global import random import sysfrom PySide6.QtGui import QGuiApplication from PySide6.QtQml import QQmlApplicationEngine, qmlRegisterType from PySide6.QtCore import QUrl, QObject, Signal, Slotclass NumberGenerator(QObject):def __init__(self):QObject.__init__(self)nextNumber Signal(int, arguments[number])Slot()def giveNumber(self):self.nextNumber.emit(random.randint(0, 99))if __name__ __main__:app QGuiApplication(sys.argv)engine QQmlApplicationEngine()qmlRegisterType(NumberGenerator, Generators, 1, 0, NumberGenerator)# engine.load(QUrl(main.qml))import ospath os.path.dirname(__file__) os.sep main.qmlengine.load(path)if not engine.rootObjects():sys.exit(-1) sys.exit(app.exec()) #endregion globalmain.qml 文件中需要导入 Python 注册的模块 Generators并将类实例化为 NumberGenerator{…}该实例就可以向任何其他 QML 元素一样工作。 qmlRegisterType( ) 函数 把 Python 对象暴露给 QML 主要使用 qmlRegisterType() 函数。qmlRegisterType( ) 函数来自于 PySide6.QtQml 模块并接收5个参数 qmlRegisterType (pytype: type, uri: str, versionMajor: int, versionMinor: int, qmlName: str**)** 参数: pytype (type) – Python 类py文件中的类名uri (str) – 表示对类的引用如本案例的 GeneratorQML中 import 的名称versionMajor (int) – 主要版本编号如本案例中的 1versionMinor (int) – 次要版本编号如本案例中的 0qmlName (str) – 暴露给QML的类名称本案例中的 NumberGenerator 返回类型int (the QML type id) 相互关系如下图所示 在 QML 中调用 Python 属性的方法 这是一种常用的方法先介绍 Python 中的 Property( ) 函数——property() 函数的作用是在新式类中返回属性值。 class property([fget[, fset[, fdel[, doc]]]])参数 fget – 获取属性值的函数fset – 设置属性值的函数fdel – 删除属性值函数doc – 属性描述信息 返回值 返回新式类属性。 举例如下 class C (object):def __init__(self):self._x Nonedef getx(self):return self._xdef setx(self, value):self._x valuedef delx(self):del self._xx property(getx, setx, delx, I am the x property.) 如果 c C( )则 c.x 将触发 getter 信号 c.x value 将触发 setter 信号del c.x 将触发 deleter 信号。 参照 Python 中的 Property( ) 函数Qt 中不仅提供了自己的属性还提供了信号和槽的支持。由此可以理解以下代码的几个参数分别表示类型已及 getter 信号、setter 信号和通知信号当属性改变时需要发出该信号通知属性的变化 from PySide6.QtCore import Property maxNumber Property(int, get_max_number, set_max_number, notify maxNumberChanged)之所以绕一圈进行修改是因为在 QML 中直接通过 JavaScript 更改属性会破坏与属性的绑定而通过显示使用 setter( ) 函数可以避免这种情况。 参考
http://www.hkea.cn/news/14492277/

相关文章:

  • 网站打开很慢电子版简历怎么弄
  • 工程建设项目在哪个网站查询西安seo经理
  • 专业网站定制设计公司网页推广链接怎么做
  • 公司管理系统网站分类信息网站做推广
  • 怎么看网站关键词密度化妆品商城网站建设开发策划方案
  • 长沙网站seo方法html简单网页代码课程表
  • 无域名网站 能否被百度网站开发的主要阶段
  • 深圳正规网站制作哪里好2016wap网站开发语言
  • 社交做的最好的网站有哪些wordpress菜单栏图标
  • 出名的设计网站wordpress获取访问位置
  • 做网站代理需要办什么营业执照上传wordpress网站
  • 网站建设方案书腾讯云wordpress换空间要改什么
  • 做网站干什么wordpress文章编辑代码
  • 中学网站源码龙海网络推广
  • 网站备案密码有什么用自助商城
  • 南京哪里可以做网站响应式网站设计教程
  • 杭州网站建设哪里好有一个网站怎么做cpc
  • 虚拟主机wordpress不能用广州新站优化
  • 岳阳网站建设一站式服务广州展厅设计公司排名
  • 什么是专业网站学做宝宝衣服网站
  • 网页设计与网站开发北京网站制作设计与开发服务
  • 外贸企业 访问国外网站西安到北京高铁多长时间
  • 网上网站开发郑州网站建设网站推广
  • 南宁建设局网站网站建设背景朝阳
  • 如何做网站网页流程百度网站收入提交
  • 邮件服务器是不是网站服务器南阳网站建设哪家专业
  • 网站建设返回函数门户网站建设工作领导小组
  • 昆明做网站建设价位鼓楼福州网站建设
  • 浙江省建设网站证件照在线制作网页版
  • org是国外的网站吗社区论坛系统免费开源