QT实战经验总结 连载中

QT实战经验总结

  • 在看书系统学习后,就开始实战了,会遇到很多问题
    • 1.信号和槽的思考
    • 2.在python 或 C++ 代码中,对 QML 代码中控件的调用
    • 关于在一个窗口上不断打开新窗口

在看书系统学习后,就开始实战了,会遇到很多问题

python案例

1.信号和槽的思考

  • 当我练习简单的信号和槽的时候,只是 print 一些文字,所以我的槽函数没有封装到类中。但是当我做一些复杂操作时,我发现就得用类来封装起来。这里就涉及一个 engine.rootContext().setContextProperty("backend", backend)
    作用是让 backend 这个类,可以在 QML 中调用,因为类定义是在 python 中写的

  • 我在练习信号和槽的时候发现,我的python代码(后端)可以给QML代码(前端)发现号,而前端也可以给后端发现号。所以我发现这两中发现号的方式是不一样的。

    • 前端给后端发,常用的比如点击按钮,

      • 前端在你的 Button 中使用 onClicked{槽函数} 发射信号,对应的你的后端代码得有 @Slot() 来接收这个信号
    • 后端给前端发

      • 后端中使用 Signal() 发射信号,对应的前端得用 Connections 接收信号,Connections是专门监听后端信号的控件,它有监听目标 target 属性值和槽函数 function onFileSelected() 属性值

2.在python 或 C++ 代码中,对 QML 代码中控件的调用

刚开始写QT的时候,我就遇到这个问题
我在写后端逻辑时,会涉及到对前端 QML 控件的调用。
比如,我点击按钮,改变按钮或其他控件的属性。

这里需要用到的就是 engin.rootobject()[0].findChild(Object,"name")
engin 是用 python 时通过 QQmlApplicationEngine() 创造的对象。

  • rootObject()[0] 获取到根控件,就是 Window 控件(我以为它是以树形展开获取,但是我测试发现只能获取到根控件,就只有这一个)
  • findChild(Object,“name”) 就是从根控件 Window 找名为 name 的子控件。
//通过点击按钮来改变该按钮的文本
//只用函数实现不了,必须通过类才可以
//要注意的是代码都是写在 sys.exit(app.exec()) 前面的
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtCore import QObject, Slot
import sys
class Backend(QObject):def __init__(self, root_object, parent=None):super().__init__(parent)self.root_object = root_object@Slot()def say_hello(self):my_button = root_object.findChild(QObject, "myButton")if my_button:print("aaa",my_button.objectName())my_button.setProperty("text","bbb")
if __name__ == "__main__":app = QGuiApplication([])engine = QQmlApplicationEngine()  engine.load("qml/main.qml")if not engine.rootObjects():sys.exit(-1)root_object = engine.rootObjects()[0]backend = Backend(root_object)engine.rootContext().setContextProperty("backend", backend)sys.exit(app.exec())

关于在一个窗口上不断打开新窗口

class MainWindow(QObject):def __init__(self):super().__init__()self.engine = QQmlApplicationEngine()self.engine.rootContext().setContextProperty("mainwindow",self)self.engine.load("main_window.qml")if not self.engine.rootObjects():sys.exit(-1)self.main_window = self.engine.rootObjects()[0]self.first_window_component = QQmlComponent(self.engine)self.first_window_component.loadUrl("first_window.qml")if self.first_window_component.isReady():self.first_window = self.first_window_component.create()if self.first_window is None:print(self.first_window_component.errorString())else:print(self.first_window_component.errors())self.second_window_component = QQmlComponent(self.engine)self.second_window_component.loadUrl("second_window.qml")if self.second_window_component.isReady():self.second_window = self.second_window_component.create()if self.second_window is None:print(self.second_window_component.errorString())else:print(self.second_window_component.errors())@Slot()def close(self):self.main_window.close()@Slot()def first_window_close(self):self.first_window.close()@Slot()def second_window_close(self):self.second_window.close()if __name__ == "__main__":app = QGuiApplication(sys.argv)main_window = MainWindow()sys.exit(app.exec())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从 CephFS 到 JuiceFS:同程旅行亿级文件存储平台构建之路

随着公司业务的快速发展,同程旅行的非结构化的数据突破 10 亿,在 2022 年,同程首先完成了对象存储服务的建设。当时,分布式文件系统方面,同程使用的是 CephFS,随着数据量的持续增长,CephFS 的高…

固定资产分类,提升资产盘活效益

固定资产是企业长期使用的重要资源,涵盖范围广、种类多,不同的资产需要针对性管理。通过科学的分类与高效的盘活策略,不仅可以优化资源配置,还能提升企业资产的利用效率和经济效益。以下将详细解析固定资产的分类方式和盘活效益的…

富途证券C++面试题及参考答案

C++ 中堆和栈的区别 在 C++ 中,堆和栈是两种不同的内存区域,它们有许多区别。 从内存分配方式来看,栈是由编译器自动分配和释放的内存区域。当一个函数被调用时,函数内的局部变量、函数参数等会被压入栈中,这些变量的内存空间在函数执行结束后会自动被释放。例如,在下面的…

【字符串匹配算法——BF算法】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 BF算法介绍及过程演示代码实现过程下节预告KMP算法利用next数组存储子串中j回退的位置(…

Linux 文件系统目录结构及其简要介绍

Hello! 亲爱的小伙伴们,大家好呀(Smile~)!我是 H u a z z i Huazzi Huazzi,欢迎观看本篇博客,接下来让我们一起来学习一下Linux 文件系统目录结构吧!祝你有所收获! 本篇博客的目录&a…

小米准备入局Nas?Nas究竟是啥?能干啥?

一开头就来了个三连问:小米准备入局Nas?Nas究竟是啥?Nas能干啥? 好像这段时间Nas这个词频频出现,但很多小伙伴都不知道这个是什么设备。首先咱们来解决一下名词Nas是什么意思。 什么是Nas? 为了尽可能解释…

基于Socket实现客户端和服务端的Tcp通信(C#)

0.前言 使用C#和Unity实现复刻Liar’s bar中的功能 软件开发大作业 本系列文章用于记录与分享开发过程中使用到的知识点,以及常见错误 本文主要描述有关网络编程的内容 目录 0.前言1.使用Socket搭建Server1.1Server端的Socket连接1.2 Server端接收Client的信息1.3…

【mysql】如何查看大表记录行数

目录 1. 使用 ANALYZE TABLE 和 SHOW TABLE STATUS2. 查询 INFORMATION_SCHEMA 表3. 使用索引统计信息4. 维护行数缓存5. 使用分区计数 1. 使用 ANALYZE TABLE 和 SHOW TABLE STATUS 1.ANALYZE TABLE 可以更新表的统计信息,然后使用 SHOW TABLE STATUS 来查看估算的…

文件断点续传(视频播放,大文件下载)

客户端每次请求取大文件部分数据。 浏览器播放mp4视频时,会首先传Range消息头,检测到206状态码,和Content-Range,Accept-Ranges 会自动请求余下数据。后端需要在文件任意偏移量取数据。 参考: springboot项目实现断…

游戏AI实现-寻路算法(A*)

A*(A-star)是一种图遍历和寻路算法,由于其完整性、最优性和最佳效率,它被用于计算机科学的许多领域。给定一个加权图、一个源节点和一个目标节点,该算法将找到从源到目标的最短路径(相对于给定的权重&#…

any/all 子查询优化规则的原理与解析 | OceanBase查询优化

背景 在通常情况下,当遇到包含any/all子查询的语句时,往往需要遵循嵌套执行的方式,因此其查询效率较低。Oceanbase中制定了相应的any/all子查询优化规则,能够能够识别并优化符合条件的any/all子查询,从而有效提升查询…

[HNOI2002] 营业额统计 STL - set集合

文章目录 [HNOI2002] 营业额统计题目描述样例输入 #1样例输出 #1 提示题解相关知识点set [HNOI2002] 营业额统计 STL - set解题 题目描述 Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出…

汽车供应链 “剧变”开始,“智能感知潜在龙头”诞生

智能汽车产业链“剧变”已经开启,智能感知软硬件能力的权重正在不断被放大。 比如满足高阶泊车的第二代AK2超声波传感器、满足人机共驾场景需求的电子外后视镜(CMS)、iTOF 3D成像视觉感知(用于舱内监控)等新产品&…

Latex中表格添加底部文本注释并调整对齐

如何实现从第一个表到第三个表的转换, 其中主要涉及到两点: (1)底部脚注与表格自动对齐并缩进换行 (2)表格自适应页面宽度 底部脚注的对齐与换行缩进需要用到 \usepackage{threeparttable} \usepackage{…

SQL 查询方式比较:子查询与自连接

在 SQL 中,子查询和自连接是两种常见的查询方式,它们的功能虽然可以相同,但实现的方式不同。本文通过具体示例,深入探讨这两种查询方式,并配合数据展示,帮助大家理解它们的使用场景和差异。 数据示例 假设…

html基础-认识html

1.什么是html html是浏览器可以识别的的标记语言&#xff0c;我们在浏览器浏览的网页就是一个个的html文档 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>认识html</title> </head> <body><h1…

linux 无网络安装mysql

下载地址 通过网盘分享的文件&#xff1a;mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz 链接: https://pan.baidu.com/s/1qm48pNfGYMqBGfoqT3hxPw?pwd0012 提取码: 0012 安装 解压 tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz mv /usr/mysql-5.7.33-linux-glibc2.1…

利用高德API获取整个城市的公交路线并可视化(七)

本篇文章是对我们从高德拿到的公交/地铁的json文件的精细化处理的一个深入解析&#xff0c;通过对这些原始数据进行详细的清洗、转换和分析&#xff0c;我们通过对数据的质量和可用性的提升&#xff0c;来为后续的数据精细化处理和研究做基础数据的支撑&#xff0c;从而为后续的…

OGV格式如何转换成MP4格式?五款视频格式转换工具

在数字时代&#xff0c;视频已成为我们日常生活、工作和学习中不可或缺的一部分。而不同的设备和平台往往支持不同的视频格式&#xff0c;这就需要对视频进行格式转换。 OGV&#xff08;Ogg Video File&#xff09;是一种使用OGG开源格式的容器&#xff0c;用于存储带或不带音频…

番外篇 | Hyper-YOLO:超图计算与YOLO架构相结合成为目标检测新的SOTA !

前言:Hello大家好,我是小哥谈。Hyper-YOLO,该方法融合了超图计算以捕捉视觉特征之间复杂的高阶关联。传统的YOLO模型虽然功能强大,但其颈部设计存在局限性,限制了跨层特征的融合以及高阶特征关系的利用。Hyper-YOLO在骨干和颈部的联合增强下,成为一个突破性的架构。在COC…