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

服饰的网站建设新闻头条最新消息今天

服饰的网站建设,新闻头条最新消息今天,垂直电商网站建设方案,成都百度seo搜索引擎优化培训在 Qt 中,C 和 QML 交互一般有如下三种方法 上下文属性:setContextProperty( )向引擎注册类型:调用 qmlRegisterType( )QML 扩展插件:虽然有很大的灵活性,但是用 Python 创建 QML 插件比较麻烦,所以这种方法…

在 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.qml'engine.load(path)if not engine.rootObjects():sys.exit(-1)  sys.exit(app.exec())
#endregion global

main.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) – 表示对类的引用,如本案例的 Generator(QML中 import 的名称)
  • versionMajor (int) – 主要版本编号,如本案例中的 1
  • versionMinor (int) – 次要版本编号,如本案例中的 0
  • qmlName (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.khdw.cn/news/51505.html

相关文章:

  • 开店做网站产品推广ppt
  • 有什么可以接单做的网站刷排名seo软件
  • 济源市网站建设广州优化防控措施
  • 泰安可以做网站的公司seo网站介绍
  • 政府网站功能分析 选做网络营销与传统营销的整合
  • 网站定制公司地址b2b免费外链发布
  • 昆明网站制作工具seo高级教程
  • 绵阳网站建设信赖辉煌惠州网站营销推广
  • 网站建设步骤及分工网络营销课程速成班
  • 永州企业网站开发软文推广服务
  • 网站后台问题日本域名注册
  • 做暧昧网站seo推广优化
  • 小程序推广员好做吗seo提高网站排名
  • 网站meta 优化建议百度seo关键词排名优化工具
  • 怎么做游戏门户网站seo流量排名工具
  • 网站建设技术咨询协议免费放单平台无需垫付
  • 做优惠券网站如何引流博客推广工具
  • 深圳好看的网站建设哪家公司好重庆seo关键词排名
  • 威海专业做网站设计的公司seo推广优势
  • 青岛网站建设-中国互联百度app客服人工在线咨询
  • 网站策划案需要包括哪些seo网络推广员招聘
  • 优化网站和网站建设山东东营网络seo
  • 一级a做爰视频安全网站友情链接怎么设置
  • 电脑系统做的好的网站好色盲色弱测试
  • 怎么做资源类网站seo内容优化方法
  • 免费网站怎么做啊怎么制作个人网站
  • 十大最坑装修公司排名优化网站链接的方法
  • 什么做网站做个网站一般要多少钱啊东莞今日新闻大事
  • 制作个人网站步骤全世界足球排名国家
  • 网页设计师是什么专业手机百度seo怎么优化