导言
如上所示,登上Qt Pyside6的官方网址:https://doc.qt.io/qtforpython-6/index.html,点击“Write your first Qt application”的"Start here!"按钮。
效果:
工程代码:
- github:https://github.com/q164129345/myPyside6_QML/tree/main/basic01_main_window
- gitee:https://gitee.com/wallace89/myPyside6_QML/tree/main/basic01_main_window
一、我的第一个Qt Quick程序(Pyside6)
1.1、项目结构
basic01_main_window/
│
├── main.py
│
└── Example/├── Main.qml # 界面定义└── qmldir # 模块描述文件
1.2、Example模块
basic01_main_window/
│
├── main.py
│
└── Example/├── Main.qml # 界面定义└── qmldir.txt # 模块描述文件
Examlpe模块(实际是文件夹)里一共有两个文件Main.py与qmldir.txt。
注意:QML代码文件的命名一定要用大写字母开头。
Main.qml
// 导入Qt Quick模块,提供基础的QML组件
import QtQuick
// 导入Qt Quick Controls模块,提供按钮等控件
import QtQuick.Controls
// 导入Qt Quick Layouts模块,提供布局管理
import QtQuick.Layouts// 定义一个窗口组件
Window {width: 300 // 窗口宽度height: 200 // 窗口高度visible: true // 窗口可见性title: "Hello World" // 窗口标题// 定义一个只读属性,包含不同语言的问候语列表readonly property list<string> texts: ["Hallo Welt", "Hei maailma","Hola Mundo", "Привет мир"]// 定义一个函数,用于随机设置文本function setText() {// 生成0-3之间的随机整数var i = Math.round(Math.random() * 3)// 将随机选择的文本赋值给text组件text.text = texts[i]}// 使用列布局管理器,垂直排列子组件ColumnLayout {anchors.fill: parent // 填充父组件的整个区域// 文本组件,显示问候语Text {id: text // 组件ID,用于在其他地方引用text: "Hello World" // 默认显示的文本Layout.alignment: Qt.AlignHCenter // 在布局中水平居中对齐}// 按钮组件Button {text: "Click me" // 按钮上显示的文字Layout.alignment: Qt.AlignHCenter // 在布局中水平居中对齐onClicked: setText() // 点击事件处理:调用setText函数}}
}
qmldir.txt
module Example
Main 254.0 Main.qml
1.3、main.py
# python3.10.11 - PySide6==6.9
import sys
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngineif __name__ == "__main__":app = QGuiApplication(sys.argv)engine = QQmlApplicationEngine()engine.addImportPath(sys.path[0]) # 当前项目路径engine.loadFromModule("Example", "Main") # 模块(Example) + QML文件名(Main.qml)if not engine.rootObjects():sys.exit(-1)sys.exit(app.exec())del enginesys.exit(exit_code)
二、细节补充
2.1、qmldir.txt是什么?
比喻
qmldir 文件就像一本“目录索引”。想象一下你去图书馆借书,书放在书架上,但你必须先看“目录卡片”,才知道“哪本书在哪一层书架”。在 QML 里,qmldir 就是这张目录卡片——它告诉 QML 引擎,这个文件夹是一个 QML 模块,它里面有哪些组件、版本是多少、对应的 QML 文件叫什么。
正式定义
qmldir 是一个 纯文本文件,名字必须叫 qmldir。它通常放在一个文件夹里,这个文件夹就会变成一个 QML 模块。内容里列出:
- 模块名称(module)
- 组件名称(比如 Main)
- 组件版本号(比如 1.0 或 254.0)
- 组件对应的文件(比如 Main.qml)
本次例子的内容
module Example
Main 254.0 Main.qml
解释:
- module Example:这个文件夹(Example)是一个模块,名字叫 Example。
- Main 254.0 Main.qml:模块里有个组件叫 Main,版本是 254.0,它的实现文件就是 Main.qml。
为什么需要它?
因为在 Python 里我们写了:
engine.loadFromModule("Example", "Main")
这里的 “Example” 和 “Main” 就是去找 Example 目录下的 qmldir 文件 → 然后 qmldir 再告诉引擎:
“Main 组件 = Main.qml 文件”。这样 QML 引擎才知道去哪加载界面。