ToB企服应用市场:ToB评测及商务社交产业平台

标题: QT实战履历总结 连载中 [打印本页]

作者: 兜兜零元    时间: 2024-12-18 11:04
标题: QT实战履历总结 连载中
在看书系统学习后,就开始实战了,会遇到许多问题

python案例
1.信号和槽的思考

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

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

刚开始写QT的时候,我就遇到这个问题
我在写后端逻辑时,会涉及到对前端 QML 控件的调用。
比如,我点击按钮,改变按钮或其他控件的属性。
这里需要用到的就是 engin.rootobject()[0].findChild(Object,"name")
engin 是用 python 时通过 QQmlApplicationEngine() 创造的对象。

  1. //通过点击按钮来改变该按钮的文本
  2. //只用函数实现不了,必须通过类才可以
  3. //要注意的是代码都是写在 sys.exit(app.exec()) 前面的
  4. from PySide6.QtGui import QGuiApplication
  5. from PySide6.QtQml import QQmlApplicationEngine
  6. from PySide6.QtCore import QObject, Slot
  7. import sys
  8. class Backend(QObject):
  9.     def __init__(self, root_object, parent=None):
  10.         super().__init__(parent)
  11.         self.root_object = root_object
  12.     @Slot()
  13.     def say_hello(self):
  14.         my_button = root_object.findChild(QObject, "myButton")
  15.         if my_button:
  16.             print("aaa",my_button.objectName())
  17.         my_button.setProperty("text","bbb")
  18. if __name__ == "__main__":
  19.     app = QGuiApplication([])
  20.     engine = QQmlApplicationEngine()  
  21.     engine.load("qml/main.qml")
  22.     if not engine.rootObjects():
  23.         sys.exit(-1)
  24.     root_object = engine.rootObjects()[0]
  25.     backend = Backend(root_object)
  26.     engine.rootContext().setContextProperty("backend", backend)
  27.     sys.exit(app.exec())
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4