Qt第十章:初识QML

╰+攻爆jí腚メ 2024-04-03 10:35 159阅读 0赞
  1. /**************************QML文件**************************/
  2. import QtQuick
  3. import QtQuick.Window
  4. import QtQuick.Controls 6.3
  5. import QtQuick.Layouts 6.3
  6. import QtQuick.Controls.Windows 6.0
  7. //主窗口
  8. Window {
  9. width: 640
  10. height: 480
  11. visible: true
  12. title: qsTr("Hello EveryBody")
  13. //文本展示框
  14. Text {
  15. id: text1
  16. //用于python获取此对象
  17. objectName:"text1"
  18. x: 125
  19. y: 119
  20. width: 131
  21. height: 34
  22. text: qsTr("Text")
  23. font.pixelSize: 12
  24. }
  25. //一:通过JavaScript控制UI逻辑
  26. Button {
  27. id: button
  28. x: 125
  29. y: 179
  30. width: 125
  31. height: 29
  32. text: qsTr("调用JavaScript")
  33. //点击事件
  34. onClicked: {
  35. change()
  36. }
  37. //JavaScript函数
  38. function change(){
  39. var date = new Date();
  40. text1.text=qsTr(date.getFullYear()+"年"+(date.getMonth() + 1)+"月"+date.getDate()+"日"+date.getHours()+"时"+date.getMinutes()+"分"+date.getSeconds()+"秒")
  41. }
  42. }
  43. //二:通过Python控制UI逻辑(不推荐,因为要做UI与业务逻辑分离;槽函数相当于于ajax请求来获取数据,而不是去控制UI本身)
  44. Button {
  45. id: button1
  46. x: 325
  47. y: 179
  48. width: 125
  49. height: 29
  50. text: qsTr("调用Python")
  51. //点击事件
  52. onClicked: {
  53. //调用注入的槽函数,使用槽函数改变视图
  54. slots.set_text_msg("小小改变")
  55. }
  56. }
  57. //三:通过Python获取数据,JavaScript渲染UI(推荐方式)
  58. Button {
  59. id: button2
  60. x: 525
  61. y: 179
  62. width: 125
  63. height: 29
  64. text: qsTr("调用Python获取数据")
  65. //点击事件
  66. onClicked: {
  67. //调用注入的槽函数,使用槽函数获取数据
  68. var msg=slots.get_text_msg()
  69. //利用JS进行渲染
  70. text1.text=qsTr(msg)
  71. }
  72. }
  73. }
  74. import sys
  75. from pathlib import Path
  76. from PySide6.QtCore import QObject, Slot
  77. from PySide6.QtGui import QGuiApplication
  78. from PySide6.QtQml import QQmlApplicationEngine
  79. from PySide6.QtQuick import QQuickView, QQuickItem
  80. # 槽函数类(一个承载槽函数的容器类)
  81. class Slots(QObject):
  82. def __init__(self, objects):
  83. self.objects = objects
  84. super().__init__()
  85. @Slot(str, result=None)
  86. def set_text_msg(self, msg):
  87. # 获取qml中的Text对象
  88. child = self.objects[0].findChild(QQuickItem, "text1")
  89. # 获取对象属性
  90. p = child.property("text")
  91. # 设置对象属性
  92. child.setProperty("text", p + msg)
  93. @Slot(result=str)
  94. def get_text_msg(self):
  95. return "皎氯"
  96. if __name__ == "__main__":
  97. app = QGuiApplication(sys.argv)
  98. engine = QQmlApplicationEngine()
  99. qml_file = Path(__file__).resolve().parent / "main.qml"
  100. # 加载qml文件
  101. engine.load(qml_file)
  102. if not engine.rootObjects():
  103. sys.exit(-1)
  104. # qml对象集合
  105. objects = engine.rootObjects()
  106. # 实例化槽函数
  107. slots = Slots(objects)
  108. # 注入槽函数
  109. engine.rootContext().setContextProperty('slots', slots)
  110. # 开启循环
  111. sys.exit(app.exec())

发表评论

表情:
评论列表 (有 0 条评论,159人围观)

还没有评论,来说两句吧...

相关阅读

    相关 QtQML之Item

    Item是Qt Quick中所有可视组件的基本类型,Qt Quick中的所有可视组件都继承于Item。它定义了所有可视组件的通用属性,如坐标、宽高、锚定关系、事件处理等等。

    相关 Qt绘图QGraphicsItem

    最近学习Qt绘图,花了很长的时间,也费了一些心思,好在有所收获,也不枉这几个月的各种苦熬,在这里做一些总结。如题目所说,这也只是初识QGraphicsItem,我需要做的是继续