对话框
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通常已足够)。