From cd5e1c26c246d550cbeb73c60081c6580f67b7c5 Mon Sep 17 00:00:00 2001 From: "rick.chan" Date: Sun, 13 Aug 2023 11:43:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=B5=84=E6=96=99.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rick.chan --- .../Qt/QML/QML_应用程序开发技术总结.md | 65 +++++++++++-------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/Software/Development/Environment/Qt/QML/QML_应用程序开发技术总结.md b/Software/Development/Environment/Qt/QML/QML_应用程序开发技术总结.md index f274fe1..a9f408b 100644 --- a/Software/Development/Environment/Qt/QML/QML_应用程序开发技术总结.md +++ b/Software/Development/Environment/Qt/QML/QML_应用程序开发技术总结.md @@ -19,18 +19,20 @@ - [6.2. 添加图标到应用](#62-添加图标到应用) - [7. 绘制圆形](#7-绘制圆形) - [8. 常用组件](#8-常用组件) - - [8.1. QtQuick.Controls.Button](#81-qtquickcontrolsbutton) - - [8.2. Dialog 对象](#82-dialog-对象) - - [8.2.1. QtQuick.Controls 中的 Dialog](#821-qtquickcontrols-中的-dialog) - - [8.2.2. QtQuick.Dialogs](#822-qtquickdialogs) - - [8.2.2.1. FileDialog](#8221-filedialog) - - [8.2.2.2. MessageDialog](#8222-messagedialog) - - [8.3. ComboBox](#83-combobox) - - [8.4. Grid](#84-grid) - - [8.5. ScrollView](#85-scrollview) - - [8.6. GridView](#86-gridview) - - [8.7. BusyIndicator](#87-busyindicator) - - [8.8. VirtualKeyboard](#88-virtualkeyboard) + - [8.1. QtQuick.Loader](#81-qtquickloader) + - [8.2. QtQuick.Controls.Button](#82-qtquickcontrolsbutton) + - [8.3. Dialog 对象](#83-dialog-对象) + - [8.3.1. QtQuick.Controls 中的 Dialog](#831-qtquickcontrols-中的-dialog) + - [8.3.2. QtQuick.Dialogs](#832-qtquickdialogs) + - [8.3.2.1. FileDialog](#8321-filedialog) + - [8.3.2.2. MessageDialog](#8322-messagedialog) + - [8.4. ComboBox](#84-combobox) + - [8.5. Grid](#85-grid) + - [8.6. ScrollView](#86-scrollview) + - [8.7. QtQuick.ListView](#87-qtquicklistview) + - [8.7. GridView](#87-gridview) + - [8.8. BusyIndicator](#88-busyindicator) + - [8.9. VirtualKeyboard](#89-virtualkeyboard) - [9. 多文档开发](#9-多文档开发) - [9.1. 多 QML 文件的管理](#91-多-qml-文件的管理) - [9.2. 如何引用自定义 QML 文件](#92-如何引用自定义-qml-文件) @@ -300,7 +302,12 @@ If you do not use qmake, the necessary steps are: first, create an .rc file and ## 8. 常用组件 -### 8.1. QtQuick.Controls.Button +### 8.1. QtQuick.Loader + +TODO: +TODO: 参考 XiaYu 项目中的 SubMenuGrp 和 SubMenuBtn 对 default 属性和子组件引用父组件方法、属性进行说明。 + +### 8.2. QtQuick.Controls.Button ```js Button { @@ -316,13 +323,13 @@ Button { } ``` -### 8.2. Dialog 对象 +### 8.3. Dialog 对象 QML 中有三大类 Dialog 对象,这里主要介绍 QtQuick.Controls 中的 Dialog 和 QtQuick.Dialogs。 -#### 8.2.1. QtQuick.Controls 中的 Dialog +#### 8.3.1. QtQuick.Controls 中的 Dialog -QtQuick.Controls 中的 Dialog 比较原始,需要属性需要自行定义和实现,所以它的自由度也比较高。该 Dialog 包含了页眉(Header)、页脚(Footer)和内容(Content)三部分,每个部分都可以单独设定。 +QtQuick.Controls 中的 Dialog 比较原始,属性需要自行定义和实现,所以它的自由度也比较高。该 Dialog 包含了页眉(Header)、页脚(Footer)和内容(Content)三部分,每个部分都可以单独设定。 - footer:Item @@ -362,7 +369,7 @@ Dialog { 除 Ok Button 和 Cancel Button 外,还有许多系统预定义的 Standard Button 可自行翻阅 QML 帮助获得相关帮助信息。 -#### 8.2.2. QtQuick.Dialogs +#### 8.3.2. QtQuick.Dialogs 在使用 QtQuick.Dialogs 的 Dialog 对象时,如果使用 QGuiApplication 来执行则会导致无法加载主题风格,并且对话框无法正确显示图标。如果最初使用 QGuiApplication 创建了 app,则需要进行如下修改: @@ -383,7 +390,7 @@ QApplication app(argc, argv); Dialog 对象默认不显示,当调用 Dialog 的 open() 方法后弹出窗口并阻塞父窗体的执行。 -##### 8.2.2.1. FileDialog +##### 8.3.2.1. FileDialog FileDialog 为标准文件对话框。 @@ -422,7 +429,7 @@ Window { } ``` -##### 8.2.2.2. MessageDialog +##### 8.3.2.2. MessageDialog MessageDialog 为标准消息对话框。 @@ -462,7 +469,7 @@ Window { } ``` -### 8.3. ComboBox +### 8.4. ComboBox ComboBox 为标准组合框 @@ -490,7 +497,7 @@ Window { } ``` -### 8.4. Grid +### 8.5. Grid 布局组件,可以布局多个行和列,每个子成员必须是相同类型,一般使用 Item 来组织多个不同类型。每个子成员必须设置高度和宽度,否则不被显示。 @@ -527,11 +534,17 @@ Grid { } ``` -### 8.5. ScrollView +### 8.6. ScrollView ScrollView 会为其所容纳的对象创建滚动条。 -### 8.6. GridView +### 8.7. QtQuick.ListView + +TODO: header, headerPositioning + +TODO: 如果通过设置 header 和 headerPositioning 参数来实现固定 header,且同时伴有 ScrollBar 的情况下,滚动条依然会覆盖到 header 上,效果不理想。此时最好在 ListView 之外使用 Row 嵌套 Label 来实现类似效果。 + +### 8.7. GridView GridView 可以以网格的形式显示模型内容。可以使用 ListModel 或 XmlListModel 作为模型。 @@ -639,7 +652,7 @@ Window { } ``` -### 8.7. BusyIndicator +### 8.8. BusyIndicator 用于指示工作状态,设置 BusyIndicator 的 running 属性为 true 将默认显示一个旋转的圆圈;设置 running 属性为 false 则 BusyIndicator 将不显示。 @@ -664,7 +677,7 @@ Window { 可以对 BusyIndicator 进行自定义。 -### 8.8. VirtualKeyboard +### 8.9. VirtualKeyboard 一些涉及触屏的应用会涉及到虚拟键盘/软键盘的应用,不同系统平台上往往会提供不同的软键盘工具,但相比之下,Qt 内嵌的 VirtualKeyboard 更加易用,并具有很好的跨平台能力,中文(拼音)、英文以及其他主要语言的支持能力也比较好。 @@ -839,7 +852,7 @@ QML 与 C++ 之间主要通过信号槽机制来传递消息。 QML 使用 C++ 中声明的类型可以为类、结构体或枚举等。若需要将 C++ 类导出给 QML,则需要使用 qmlRegisterType() 方法进行注册: ```cpp -qmlRegisterType("package.Type", , ,"Type"); +qmlRegisterType("package.Type", , , "Type"); ``` 之后在 QML 中使用 C++ 类创建对象即可。若需要在 QML 中使用类中定义的枚举,格式如下: