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

QT实战经验总结 连载中

QT实战经验总结

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

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

python案例

1.信号和槽的思考

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

  • rootContext().setContextProperty(“backend”,backend)
    作用是让 backend 这个类,可以在 QML 中调用,因为类定义是在 python 中写的

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())

http://www.kler.cn/a/440978.html

相关文章:

  • 乐优购物商城设计与实现
  • 华为ensp--BGP自动路由聚合
  • STM32 HAL库 + LM2904运算放大器 + ADC + 4-20ma液位传感器:电路设计及代码实现
  • 【功能安全】硬件集成和验证
  • 深入网络安全:从理论到实践的探索
  • 【PPTist】画布状态管理
  • Flink CDC 读取oracle库数据性能优化
  • Qt之修改窗口标题、图标以及自定义标题栏(九)
  • 【Leetcode 每日一题】3291. 形成目标字符串需要的最少字符串数 I
  • 建站经验:服务器同步与数据库备份的终极解决方案
  • Arrys.asList踩坑实录
  • Linux计算时间差
  • 【LeetCode】2381、字母移位 II
  • Three.js相机Camera控件知识梳理
  • 压力测试Jmeter简介
  • Java全栈项目实战:校园论坛社交平台开发
  • Vue3实现双向绑定的基本原理和代码示例解析
  • HAL库与标准库的GPIO配置结构体对比
  • 免费下载 | 2024全球AI网络安全产品洞察报告
  • Python-基于Pygame的小游戏(贪吃蛇)(一)