導言
如上所示,登上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 引擎才知道去哪加載界面。