遇见的坑

qt 5.11 与 qt 5.12 中Qquick的差异还是蛮大的,由开发环境:Pyqt5.11 + Qt5.12 部署到 Pyqt5.11 + Qt5.11时遇到以下问题:

1.当一个Item引用另一个Item,当层次比较深入时,有可能引用不到此Item对象。这时可以用alias别名尝试把此对象作为顶层类的属性。另还有一个可能是因为Item文件的命名冲突,比如我把Item文件命名为ContentLeft.qml就会出现一些莫名奇妙的问题,后来把名称改为ContentLeftF.qml就没有。由“ContentLeft"改成”ContentLeftF.qml"问题解决。

2.有些str类型的属性可以直接用于QML,但有些会提示QString不对

    #barcode
@pyqtProperty(str,notify=barcodeChanged)
def barcode(self):
return self._barcode @barcode.setter
def barcode(self, value):
self._barcode = value
self.barcodeChanged.emit(value)

把以上写法改为下面写法即没问题:

projectName = pyqtProperty(str, fget=getProjectValue, fset= setProjectValue, notify=projectNameChanged)

一些套路

1.把python类注册成qml类

qmlRegisterType(CameraOpencv,'MyCamera',1,0,'MyCustomOpenCVItem')

可以直接在qml用

import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.1
import MyCamera 1.0 Item{
id:root
property alias myCustomOpenCVItem: myCustomOpenCVItem
Rectangle{
color:"black"
anchors.fill: parent
MyCustomOpenCVItem{
id:myCustomOpenCVItem
objectName:"camera_win"
anchors.fill:parent
}
MouseArea{
anchors.fill: parent
onClicked: {
content.contentMiddle.myCustomOpenCVItem.save()
}
}
}
}

2.把python对象传至qml

        self.imageModel = ModelImages()
self.rootContext().setContextProperty('ImagesModel', self.imageModel)

qml中直接调用

        ListView {
id : m_listView
width: parent.width
height: root.height
clip: true
model: ImagesModel //modelImages
delegate: m_delegate
spacing: 5
focus: true
verticalLayoutDirection: ListView.BottomToTop
add: Transition {
NumberAnimation { properties: "y";duration: 400 }
}
remove: Transition {
NumberAnimation { properties: "y";duration: 400 }
}
}

3.设置可在qml中用的属性

方法一:

self._goodsName = '' #当前商品名称
goodsNameChanged = pyqtSignal(str)
@pyqtProperty(str,notify=goodsNameChanged)
def goodsName(self):
return self._goodsName @goodsName.setter
def goodsName(self, value):
self._goodsName = value
self.goodsNameChanged.emit(value)

方法二:

projectName = pyqtProperty(str, fget=getProjectValue, fset= setProjectValue, notify=projectNameChanged)

4.qml动态设置component

                function getLoader (){

                    switch (uploadStatus)
{
case "imgUploadFail":
return uploadFail
case "imgUploadOK":
return uploadOK
case "imgUploading":
return uploading
case "imgUploadReady":
return null
default:
return null
} } Loader{
id:currLoad
anchors.fill:parent
sourceComponent:getLoader()
}

5.使用虚拟键盘

需要先安装VirtualKeyboard插件

先声明:

os.environ["QT_IM_MODULE"] = "qtvirtualkeyboard"

qml中:

import QtQuick.VirtualKeyboard 2.2
//键盘
InputPanel{
id: vkb
z:3
visible: false
anchors.bottom: parent.bottom
width: parent.width * 0.85
height: parent.height * 0.3
x:parent.width * 0.5 - width * 0.5
//这种集成方式下点击隐藏键盘的按钮是没有效果的,
//只会改变active,因此我们自己处理一下
onActiveChanged: {
if(!active) { visible = false; }
}
}

pyqt5与QML开发小结的更多相关文章

  1. vue开发小结(下)

    前言 继前几天总结了vue开发小结(上)后,发现还有很多的点没有能列举出来,于是还是打算新建一个下篇,再补充一些vue开发中需要注意的细节,确实还是都是细节的问题,我只是在这里强调下,希望对大家有帮助 ...

  2. 如何实现PyQt5与QML响应彼此发送的信号?

    对于PyQt5+QML+Python3混合编程,如何实现PyQt5与QML响应彼此发送的信号,这是一个棘手的问题. 大抵有如下五种方式: (要运行下面五个例子,千万不能在eric6中运行,会报错.错误 ...

  3. QML 开发神奇加成之为网络资源设置本地缓存

    QML 开发神奇加成之为网络资源设置本地缓存 直接上码: #include <QNetworkAccessManager> #include <QNetworkDiskCache&g ...

  4. pdfjs viewer 开发小结

    此文已由作者吴家联授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. pdfjs库简介 PDF.js 是由Mozilla 主导推出的可以将PDF文件转换为H5页面进行展示的 ...

  5. 解决QML开发中ComboBox中一个已选择项没有清除的问题

    解决QML开发中ComboBox中一个已选择项没有清除的问题 近期使用QML开发一个项目.须要使用ComboBox进行显示.当进行一个操作时,须要向ComboBox加入一个元素,当进行另外一个操作时. ...

  6. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  7. Android 即时通讯开发小结(一)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  8. 5Spring动态代理开发小结

    5Spring动态代理开发小结 1.为什么要有动态代理? 好处 1.利于程序维护 2.利于原始类功能的增强 3.得益于JDK或者CGlib等动态代理技术使得程序扩展性很强 为什么说使得程序扩展性很强? ...

  9. 移动Web开发小结

    以下是做移动端Web开发过程中小结的几个事项:希望能够帮助到大家,同时也方便自己查看: 1,在移动开发页面中,主体盒子的max-width与min-width的设置原因: ①设置max-width是为 ...

随机推荐

  1. 20165223《网络对抗技术》Exp1 PC平台逆向破解

    目录--PC平台逆向破解 1 逆向及BOF基础实践说明 1.1 实践内容 1.2 实践要求 1.3 基础知识 2 实验步骤 2.1 直接修改程序机器指令,改变程序执行流程 2.2 通过构造输入参数,造 ...

  2. 树莓派中QT实现串口通讯

    树莓派中QT实现串口通讯 开发平台为QT 此博客QT使用的为WiringPi驱动 我使用的串口调试助手为 cutecom 先简单说一些开发过程中需要注意的问题 Linux 下设备为 tty ,对应在 ...

  3. jQuery截取字符串的几种方式

    在我们写前端JS代码的时候,我们会遇到只需要其中部分字符串的时候,下面我就提供集中截取字符串的方法: 1.取后缀 var fileDir = $("#file").val(); v ...

  4. 关于 redis 的 数据类型 和 内存模型

    该文章 是在读了 公众号 : java 后端技术 之后 做的一个小记录 原文网址  : https://mp.weixin.qq.com/s/mI3nDtQdlVlLv2uUTxJegA 作者文章写的 ...

  5. SpringBoot注册Windows服务和启动报错的原因

    SpringBoot注册Windows服务和启动报错的原因 Windows系统启动Java程序会弹出黑窗口.黑窗口有几点不好.首先它不美观:其次容易误点导致程序关闭:但最让我匪夷所思的是:将鼠标光标选 ...

  6. Python语言的循环语句、迭代器与生成器、函数学习

    while循环语句 无限循环 我们可以通过设置条件表达式永远不为false来实现无限循环,实例如下: for语句 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串 Python ...

  7. 五十三、linux 编程——TCP 编程基本介绍

    53.1 socket 套接字 53.1.1 介绍 Socket(套接字)是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如 TCP/UDP 灯网络协议进行网络通讯的手段 ...

  8. JetBrain server certificate is not trusted 弹出框

    To get rid of the pop up message go to below location and click on Accept non-trusted certificates a ...

  9. (Python3) 求中位数 代码

    def zhongweishu(a): new=sorted(a) if len(a)%2==0: s=(new[int(len(a)/2-1)]+new[int(len(a)/2)])/2 else ...

  10. docker常用命令总结

    1.docker ps  查看当前正在运行的容器 2.docker ps -a 查看所有容器的状态 3.docker start/stop id/name     启动/停止某个容器 4.docker ...