对话框
Dialog
组件提供一个模态窗口,可用于显示重要信息或请求用户输入。它会覆盖当前视图,要求用户在返回主应用程序内容之前与其交互。RinUI 的 Dialog
扩展了标准的 QtQuick.Controls.Dialog
,具有自定义样式、动画和预定义结构(包括标题区域和用于标准按钮的页脚)。
基本对话框
基本对话框由标题、内容和标准按钮(例如“确定”、“取消”)组成。内容项作为 Dialog
组件的直接子项添加。

qml
import QtQuick 2.15
import RinUI
// ...
Button {
text: qsTr("Show Basic Dialog")
onClicked: basicDialog.open()
}
Dialog {
id: basicDialog
title: qsTr("Basic Dialog Title")
// modal: true 在组件中通过 Overlay.modal 使用,因此是默认行为
standardButtons: Dialog.Ok | Dialog.Cancel
// 内容项在此处作为子项添加
Text {
text: qsTr("This is the main content of the dialog.")
}
onAccepted: {
console.log("Dialog accepted!");
// 执行“确定”操作
}
onRejected: {
console.log("Dialog rejected or closed.");
// 处理取消操作
}
}
自定义内容
您可以将任何 QML 组件作为 Dialog
的子项放置,以在对话框的内容区域内创建自定义布局和交互。这些子项会自动成为 Dialog
内部 contentItem
中 ColumnLayout
的父项。

qml
import RinUI // Consistent import
Dialog {
id: customDialog
title: qsTr("Custom Layout")
modal: true // 模态对话框,会出现窗口遮罩
standardButtons: Dialog.Apply | Dialog.Close // 使用“应用”和“关闭”按钮的示例
// 这些项成为内部 ColumnLayout 的子项
Text {
text: qsTr("Please enter your details below:")
Layout.fillWidth: true // 假设内部使用了 ColumnLayout
}
TextField { // 假设 TextField 是另一个 RinUI 组件或标准组件
id: nameField
placeholderText: qsTr("Name")
Layout.fillWidth: true
}
CheckBox { // 假设 CheckBox 是另一个 RinUI 组件
id: agreeCheck
text: qsTr("I agree to the terms and conditions")
Layout.fillWidth: true
}
}
主要属性
title
:string
- 显示在对话框标题区域的文本。standardButtons
:Dialog.StandardButtons
(枚举) - 要显示的标准按钮的组合(例如Dialog.Ok
、Dialog.Cancel
、Dialog.Yes
、Dialog.No
、Dialog.Apply
、Dialog.Close
)。这些按钮由页脚中的内部DialogButtonBox
管理。modal
:bool
- (继承) 如果为true
,对话框将阻止与应用程序其余部分的交互。RinUI 的Dialog
使用Overlay.modal
,这使其有效地成为模态对话框。contentItem
:Item
(只读) - 作为对话框内容父项的项(在 RinUI 的Dialog
中,这是一个内部ColumnLayout
)。直接添加到Dialog
的子项会自动重新父化到此contentItem
。padding
、topPadding
、bottomPadding
:real
- 控制对话框内的填充。全部默认为 24。implicitWidth
:real
- 根据内容和预定义的最小值/最大值(Utils.dialogMinimumWidth
、Utils.dialogMaximumWidth
)计算得出。closePolicy
:Popup.ClosePolicy
(枚举) - 定义用户交互如何关闭对话框。RinUI 的Dialog
默认为Popup.NoAutoClose
,这意味着它通常需要明确的按钮点击(如“确定”、“取消”或自定义关闭按钮)或调用close()
、accept()
或reject()
。
方法
open()
: 显示对话框。close()
: 隐藏对话框。除非调用了accept()
或reject()
,否则通常会发出rejected()
。accept()
: 关闭对话框并发出accepted()
信号。reject()
: 关闭对话框并发出rejected()
信号。
信号
accepted()
: 当对话框被接受时发出(例如,通过点击“确定”或“是”按钮,或调用accept()
)。rejected()
: 当对话框被拒绝或关闭时发出(例如,通过点击“取消”或“否”按钮,或调用reject()
或close()
)。- 与
standardButtons
对应的特定信号(例如applied()
、helpRequested()
)也可从基础QtQuick.Controls.Dialog
获得。
样式和行为
- 背景和遮罩层: 对话框具有带样式的背景(亚克力颜色、边框、圆角)和用于模态的烟雾效果遮罩层。
- 动画: 包括用于不透明度和缩放的
enter
和exit
过渡动画。 - 页脚:
footer
根据standardButtons
属性由内部DialogButtonBox
自动填充。对于完全自定义的按钮排列,您可能需要避免使用standardButtons
,并将自定义按钮直接作为内容添加,然后管理其onClicked
处理程序以调用accept()
、reject()
或close()
。 - 页眉:
header
属性默认为空Item
,但如果需要更复杂的页眉区域,可以用自定义 QML 替换(尽管title
通常已足够)。