QML控件类型:MenuBar、DialogButtonBox、Container

来源:QT教程 2023-07-09 04:11:22

MenuBar

一、描述

MenuBar 由下拉菜单组成,通常位于窗口的顶部边缘。继承自 Container。


(资料图片仅供参考)

ApplicationWindow {id: windowwidth: 320height: 260visible: truemenuBar: MenuBar {Menu {title: qsTr(\"&File\")Action { text: qsTr(\"&New...\") }Action { text: qsTr(\"&Open...\") }Action { text: qsTr(\"&Save\") }Action { text: qsTr(\"Save &As...\") }MenuSeparator { }Action { text: qsTr(\"&Quit\") }}Menu {title: qsTr(\"&Edit\")Action { text: qsTr(\"Cu&t\") }Action { text: qsTr(\"&Copy\") }Action { text: qsTr(\"&Paste\") }}Menu {title: qsTr(\"&Help\")Action { text: qsTr(\"&About\") }}}}

通常,菜单静态声明为菜单栏的子项,但 MenuBar 还提供 API 来动态添加、插入、删除和获取菜单。 可以使用 menuAt() 访问菜单栏中的菜单。

二、属性成员

1、delegate : Component

用于创建菜单栏项以在菜单栏中显示菜单的委托组件。

2、menus : list

菜单列表。

该列表包含在 QML 中声明为菜单栏子项的所有菜单,以及分别使用 addMenu() 和 insertMenu() 方法动态添加或插入的菜单。

三、成员函数

1、void addMenu(Menu menu)

将菜单添加到菜单列表的末尾。

2、void insertMenu(int index, Menu menu)

在索引处插入菜单。

3、Menu menuAt(int index)

返回索引处的菜单,如果不存在则返回 null。

4、void removeMenu(Menu menu)

删除和销毁指定的菜单。

5、Menu takeMenu(int index)

移除并返回 index 处的菜单。菜单的所有权转移给调用者。

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

DialogButtonBox

一、描述

对话框和消息框通常以符合该平台的界面指南的顺序显示按钮。不同的平台总是有不同顺序的对话按钮。 DialogButtonBox 允许开发人员向其中添加按钮,并且会自动为用户平台使用适当的顺序。

有几种使用 DialogButtonBox 的方法。一种方法是指定标准按钮(例如确定、取消、保存)并让按钮框设置按钮。

DialogButtonBox {standardButtons: DialogButtonBox.Ok | DialogButtonBox.CancelonAccepted: console.log(\"Ok clicked\")onRejected: console.log(\"Cancel clicked\")}

或者,可以手动指定按钮及其角色:

DialogButtonBox {Button {text: qsTr(\"Save\")DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole}Button {text: qsTr(\"Close\")DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole}}

还可以混合和匹配普通按钮和标准按钮。

当在按钮框中单击按钮时,会为实际按下的按钮发出 clicked() 信号。 此外,当按下具有相应角色的按钮时,会自动发出以下信号:

AcceptRole、YesRole:accepted() ApplyRole:applied() DiscardRole:discarded() HelpRole:helpRequested() RejectRole、NoRole:rejected() ResetRole:reset()

二、属性成员

1、alignment : flags

按钮的对齐方式。可能的值:

undefined:按钮被调整大小以填充可用空间。

Qt.AlignLeft:左对齐。 Qt.AlignHCenter:水平居中。 Qt.AlignRight:右对齐。 Qt.AlignTop:顶部对齐。 Qt.AlignVCenter:垂直居中。 Qt.AlignBottom:底部对齐。

2、buttonLayout : enumeration

在排列按钮框中包含的按钮时要使用的按钮布局策略。默认值是特定于平台的。

DialogButtonBox.WinLayout:使用适用于 Windows 应用程序的策略。 DialogButtonBox.MacLayout:使用适用于 macOS 上的应用程序的策略。 DialogButtonBox.KdeLayout:使用适合 KDE 应用程序的策略。 DialogButtonBox.GnomeLayout:使用适用于 GNOME 上的应用程序的策略。 DialogButtonBox.AndroidLayout:使用适用于 Android 上的应用程序的策略。

3、delegate : Component

用于创建标准按钮的委托。

4、position : enumeration

按钮框的位置。

如果按钮框被指定为 ApplicationWindow 或 Page 的页眉或页脚,则会自动设置相应的位置。

DialogButtonBox.Header:按钮框位于顶部。 DialogButtonBox.Footer:按钮框位于底部。默认值。

5、standardButtons : enumeration

按钮框使用的标准按钮的组合。这些按钮将按照用户平台的适当顺序放置。

DialogButtonBox {standardButtons: DialogButtonBox.Ok | DialogButtonBox.CancelonAccepted: console.log(\"Ok clicked\")onRejected: console.log(\"Cancel clicked\")}
DialogBu​ttonBox.Ok :使用 AcceptRole 定义的“确定”按钮。 DialogBu​​ttonBox.Open:使用 AcceptRole 定义的“打开”按钮。 DialogBu​​ttonBox.Save:使用 AcceptRole 定义的“保存”按钮。 DialogBu​​ttonBox.SaveAll:使用 AcceptRole 定义的“全部保存”按钮。 DialogBu​​ttonBox.Retry:使用 AcceptRole 定义的“重试”按钮。 DialogBu​​ttonBox.Ignore:使用 AcceptRole 定义的“忽略”按钮。 DialogBu​​ttonBox.Cancel:使用 RejectRole 定义的“取消”按钮。 DialogBu​​ttonBox.Close:使用 RejectRole 定义的“关闭”按钮。 DialogBu​​ttonBox.Abort:使用 RejectRole 定义的“中止”按钮。 DialogBu​​ttonBox.Discard:“放弃”或“不保存”按钮,取决于平台,使用 DestructiveRole 定义。 DialogBu​​ttonBox.Apply:使用 ApplyRole 定义的“应用”按钮。 DialogBu​​ttonBox.Reset:使用 ResetRole 定义的“重置”按钮。 DialogBu​​ttonBox.RestoreDefaults:使用 ResetRole 定义的“恢复默认值”按钮。 DialogBu​​ttonBox.Help:使用 HelpRole 定义的“帮助”按钮。 DialogBu​​ttonBox.Yes:使用 YesRole 定义的“是”按钮。 DialogBu​​ttonBox.YesToAll:使用 YesRole 定义的“全部同意”按钮。 DialogBu​​ttonBox.No:使用 NoRole 定义的“否”按钮。 DialogBu​​ttonBox.NoToAll:使用 NoRole 定义的“拒绝所有”按钮。

DialogBu​​ttonBox.NoButton:无效按钮。

三、附加属性成员

1、[read-only] DialogButtonBox.buttonBox : DialogButtonBox

管理此按钮的按钮框,如果该按钮不在按钮框中,则为 null。

2、DialogButtonBox.buttonRole : enumeration

持有按钮框中每个按钮的角色。

DialogButtonBox {Button {text: qsTr(\"Save\")DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole}Button {text: qsTr(\"Close\")DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole}}
DialogButtonBox.InvalidRole:按钮无效。 DialogButtonBox.AcceptRole:接受。 DialogButtonBox.RejectRole:取消。 DialogButtonBox.DestructiveRole:取消更改。 DialogButtonBox.ActionRole:单击按钮会导致对话框中的元素发生变化。 DialogButtonBox.HelpRole:请求帮助。 DialogButtonBox.YesRole:“是”按钮。 DialogButtonBox.NoRole:“否”的按钮。 DialogButtonBox.ResetRole:该按钮将对话框的字段重置为默认值。 DialogButtonBox.ApplyRole:应用当前更改。

四、信号成员

1、accepted()

当单击使用 AcceptRole 或 YesRole 定义的按钮时,会发出此信号。

2、applied()

当单击使用 ApplyRole 定义的按钮时,会发出此信号。

3、clicked(AbstractButton button)

当单击按钮框内的按钮时发出此信号。

4、discarded()

当单击使用 DiscardRole 定义的按钮时,会发出此信号。

5、helpRequested()

单击使用 HelpRole 定义的按钮时会发出此信号。

6、rejected()

当单击使用 RejectRole 或 NoRole 定义的按钮时,将发出此信号。

7、reset()

当单击使用 ResetRole 定义的按钮时,会发出此信号。

五、函数成员

1、AbstractButton standardButton(StandardButton button)

返回指定的标准按钮,如果不存在则返回 null。

Container

一、描述

Container 是类容器用户界面控件的基本类型,允许动态插入和删除项目。是 DialogButtonBox、MenuBar、SplitView、SwipeView、TabBar 的基类。

1.1、使用容器

通常,项目被静态声明为 Container 的子项,但也可以动态添加、插入、移动和删除项目。可以使用 itemAt() 或 contentChildren 访问容器中的项目。

大多数容器都有“当前项”的概念。当前项是通过 currentIndex 属性指定的,并且可以使用只读的 currentItem 属性进行访问。

以下示例将项目动态插入到 TabBar:

Row {TabBar {id: tabBarcurrentIndex: 0width: parent.width - addButton.widthTabButton { text: \"TabButton\" }}Component {id: tabButtonTabButton { text: \"TabButton\" }}Button {id: addButtontext: \"+\"flat: trueonClicked: {tabBar.addItem(tabButton.createObject(tabBar))console.log(\"added:\", tabBar.itemAt(tabBar.count - 1))}}}

1.2、管理当前索引

当同时使用多个容器时,例如 TabBar 和 SwipeView,它们的 currentIndex 属性可以相互绑定以保持同步。 当用户与任一容器交互时,其当前索引更改会自动传播到另一个容器。

但是在 JavaScript 中分配 currentIndex 值会删除相应的绑定。为了保留绑定,应使用以下方法更改当前索引:

增量当前索引:incrementCurrentIndex() 递减当前索引:decrementCurrentIndex() 设置当前索引:setCurrentIndex()
TabBar {id: tabBarcurrentIndex: swipeView.currentIndex}SwipeView {id: swipeViewcurrentIndex: tabBar.currentIndex}Button {text: qsTr(\"Home\")onClicked: swipeView.setCurrentIndex(0)enabled: swipeView.currentIndex != 0}Button {text: qsTr(\"Previous\")onClicked: swipeView.decrementCurrentIndex()enabled: swipeView.currentIndex >0}Button {text: qsTr(\"Next\")onClicked: swipeView.incrementCurrentIndex()enabled: swipeView.currentIndex < swipeView.count - 1}

二、属性成员

1、contentChildren : list

内容子项的列表。该列表包含在 QML 中声明为容器子项的所有项目,以及分别使用 addItem() 和 insertItem() 方法动态添加或插入的项目。

与 contentData 不同,contentChildren 不包含非可视 QML 对象。插入或移动项目时会重新排序。

2、[default] contentData : list

内容数据列表。该列表包含在 QML 中声明为容器子项的所有对象,以及分别使用 addItem() 和 insertItem() 方法动态添加或插入的项目。

与 contentChildren 不同,contentData 确实包含非可视 QML 对象。 插入或移动项目时不会重新排序。

3、contentHeight : real / contentWidth : real

内容尺寸。用于计算容器的总隐含尺寸。

除非显式覆盖,否则内容尺寸会根据容器中项目的隐式尺寸自动计算。

4、[read-only] contentModel : model

项目的内容模型。内容模型用于可视化项目。

Container {id: containercontentItem: ListView {model: container.contentModel}}

5、[read-only] count : int

项目的数量。

6、currentIndex : int

当前项目的索引。

7、[read-only] currentItem : Item

当前项目。

三、成员函数

1、void addItem(Item item)

添加一个项目。

2、void decrementCurrentIndex()

void incrementCurrentIndex() void setCurrentIndex(int index)

递减 / 递增 / 设置容器的当前索引。

可以调用这些方法来更改当前索引,而不会破坏现有的 currentIndex 绑定。

3、void insertItem(int index, Item item)

在 index 处插入一个项目。

4、Item itemAt(int index)

返回 index 处的项目,如果不存在则返回 null。

5、void moveItem(int from, int to)

将 from 处的项目移动到 to。

6、void removeItem(Item item)

移除并销毁指定的项目。

7、Item takeItem(int index)

删除并返回索引处的项目。项目的所有权转移给调用者。

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

关键词:

为你推荐

Copyright   2015-2022 起点家具网 版权所有  备案号:皖ICP备2022009963号-12   联系邮箱: 39 60 29 14 2@qq.com