弹出 QML 类型
类似于弹出的用户界面控件的基类型。 更多信息...
属性
- activeFocus : bool
- anchors.centerIn : Item
(自 QtQuick.Controls 2.5 (Qt 5.12))
- availableHeight : real
- availableWidth : real
- background : Item
- bottomInset : real
(自 QtQuick.Controls 2.5 (Qt 5.12))
- bottomMargin : real
- bottomPadding : real
- clip : bool
- closePolicy : 枚举
- contentChildren : list<Item>
- contentData : list<QtObject>
- contentHeight : real
- contentItem : Item
- contentWidth : real
- dim : bool
- enabled : bool
(自 QtQuick.Controls 2.3 (Qt 5.10))
- enter : Transition
- exit : Transition
- focus : bool
- font : font
- height : real
- horizontalPadding : real
(自 QtQuick.Controls 2.5 (Qt 5.12))
- implicitBackgroundHeight : real
(自 QtQuick.Controls 2.5 (Qt 5.12))
- implicitBackgroundWidth : real
(自 QtQuick.Controls 2.5 (Qt 5.12))
- implicitContentHeight : real
(自 QtQuick.Controls 2.5 (Qt 5.12))
- implicitContentWidth : 实数
(自 QtQuick.Controls 2.5 (Qt 5.12))
- implicitHeight : 实数
- implicitWidth : 实数
- leftInset : 实数
(自 QtQuick.Controls 2.5 (Qt 5.12))
- leftMargin : 实数
- leftPadding : 实数
- locale : 地区设置
- margins : 实数
- mirrored : 布尔
(自 QtQuick.Controls 2.3 (Qt 5.10))
- modal : 布尔
- opacity : 实数
- opened : 布尔
(自 QtQuick.Controls 2.3 (Qt 5.10))
- padding : 实数
- palette : 颜色表
(自 QtQuick.Controls 2.3 (Qt 5.10))
- parent : 项目
- rightInset : 实数
(自 QtQuick.Controls 2.5 (Qt 5.12))
- rightMargin : 实数
- rightPadding : 实数
- scale : 实数
- spacing : 实数
(自 QtQuick.Controls 2.1 (Qt 5.8))
- topInset : 实数
(自 QtQuick.Controls 2.5 (Qt 5.12))
- topMargin : 实数
- topPadding : 实数
- transformOrigin : 枚举
- verticalPadding : 实数
(自 QtQuick.Controls 2.5 (Qt 5.12))
- visible : 布尔
- width : 实数
- x : 实数
- y : 实数
- z : 实数
信号
- mvoid aboutToHide()
- mvoid aboutToShow()
- mvoid closed()
- mvoid opened()
方法
- mvoid close()
- forceActiveFocus(枚举 理由)
- void open()
详细说明
弹出窗是类似于弹出窗的用户界面控件的基本类型。它可以与 Window 或 ApplicationWindow 一起使用。
import QtQuick.Window 2.2 import QtQuick.Controls 2.12 ApplicationWindow { id: window width: 400 height: 400 visible: true Button { text: "Open" onClicked: popup.open() } Popup { id: popup x: 100 y: 100 width: 200 height: 300 modal: true focus: true closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent } }
为了确保弹出窗在场景中的其他物品上方显示,建议使用 ApplicationWindow。 ApplicationWindow 还提供背景暗淡效果。
弹出窗口不提供自己的布局,但需要您定位其内容。例如,通过创建一个 RowLayout 或一个 ColumnLayout。
被声明为弹出窗口子项的项会自动成为弹出窗口的 contentItem 的父项。动态创建的项需要显式设置为 contentItem 的父项。
弹出窗口布局
以下图解显示了窗口内的弹出窗口布局
弹出窗口的 隐式宽度 和 隐式高度 通常基于背景和内容项的隐式尺寸加上任何内边距和外边距。这些属性决定了没有指定显式 宽度 或 高度 时弹出窗口的大小。
contentItem 的几何形状由填充决定。以下示例为弹出窗口的边界和内容之间的边界保留了10px填充
Popup { padding: 10 contentItem: Text { text: "Content" } }
背景项填充弹出窗口的整个宽度和高度,除非已经给出内边距或显式尺寸。
可以使用负的内边距使背景比弹出窗口更大。以下示例使用负的内边距将阴影放在弹出窗口边界之外
Popup { topInset: -2 leftInset: -2 rightInset: -6 bottomInset: -6 background: BorderImage { source: ":/images/shadowed-background.png" } }
弹出窗口大小
如果仅在弹出窗口中使用单个项,则它将根据所包含项的隐式大小进行调整大小。这使得它特别适合与布局一起使用。
Popup { ColumnLayout { anchors.fill: parent CheckBox { text: qsTr("E-mail") } CheckBox { text: qsTr("Calendar") } CheckBox { text: qsTr("Contacts") } } }
有时弹出窗口内部可能会有两个项
Popup { SwipeView { // ... } PageIndicator { anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom } }
在这种情况下,弹出窗口无法计算一个有意义的隐式大小。由于我们将 PageIndicator 锚定到 SwipeView 上,我们可以简单地将内容大小设置为视图的隐式大小
Popup { contentWidth: view.implicitWidth contentHeight: view.implicitHeight SwipeView { id: view // ... } PageIndicator { anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom } }
注意: 弹出窗口的 content item 被设置为 overlay 的父项,并不位于弹出窗口的父项中。因此,应用于弹出窗口所在树中图层的缩放不会应用于可视弹出窗口。要使弹出窗口(例如 ComboBox)的缩放与组合框的缩放相同,还需要将相同的缩放应用于 overlay。
Window { property double scaleFactor: 2.0 Scale { id: scale xScale: scaleFactor yScale: scaleFactor } Item { id: scaledContent transform: scale ComboBox { id: combobox // ... } } Overlay.overlay.transform: scale }
弹出窗口定位
与 Qt Quick 中的项类似,弹出窗口的 x 和 y 坐标相对于其父项。这意味着,例如,如果打开一个以 Button 为父项的弹出窗口,则弹出窗口将相对于按钮进行定位。
以下示例使用附加的 Overlay.overlay 属性将弹出窗口定位在窗口的中心,而不考虑打开弹出窗口的按钮的位置
Button { onClicked: popup.open() Popup { id: popup parent: Overlay.overlay x: Math.round((parent.width - width) / 2) y: Math.round((parent.height - height) / 2) width: 100 height: 100 } }
另一种无论其父项如何都使弹出窗口在窗口中居中的方法是通过使用 anchors.centerIn
ApplicationWindow { id: window // ... Pane { // ... Popup { anchors.centerIn: Overlay.overlay } } }
为确保弹出窗口定位在封装窗口的范围内,可以将 margins 属性设置为非负值。
在弹出窗口前显示非子项目
弹出窗口将其contentItem
的visual parent
设置为窗口的overlay
,以确保弹出窗口在场景中的其他所有内容之前显示。在某些情况下,将一个项目放在弹出窗口前可能很有用,例如虚拟键盘。这可以通过将项目的父级设置为overlay,并给项目一个正的z值来实现。也可以等待弹出窗口打开后再将项目重新设置为overlay,以达到同样的效果。
Popup { id: popup visible: true anchors.centerIn: parent margins: 10 closePolicy: Popup.CloseOnEscape ColumnLayout { TextField { placeholderText: qsTr("Username") } TextField { placeholderText: qsTr("Password") echoMode: TextInput.Password } } } InputPanel { parent: Overlay.overlay width: parent.width y: popup.y + popup.topMargin + (window.activeFocusItem?.y ?? 0) + (window.activeFocusItem?.height ?? 0) z: 1 }
弹出窗口过渡
从Qt 5.15.3开始,以下属性在退出过渡完成后还原到过渡前的原始值。
这允许内置样式在这些属性上动画化而不丢失任何显式定义的值。
后退/退格键事件处理
默认情况下,如果弹出窗口有
- activeFocus,
- 它的
closePolicy
属性是Popup.CloseOnEscape
,并且 - 用户按下QKeySequence::Cancel(通常是退格键),则弹出窗口将关闭。
要防止这种情况发生,可以
- 不要给弹出窗口focus。
- 将弹出窗口的
closePolicy
设置为不包含Popup.CloseOnEscape
的值。 - 处理弹出窗口的子项的Keys‘escapePressed信号,以便它在弹出窗口之前接收到事件。
属性传播
弹出窗口通过其父窗口继承字体、调色板和附加属性,而不是其对象或可视父级。
import QtQuick.Controls.Basic ApplicationWindow { width: 500 height: 500 visible: true font.pixelSize: 20 palette.windowText: "steelblue" // This will have a pixelSize of 20 and be "steelblue" in color. header: Label { text: "ApplicationWindow Label" leftPadding: 20 topPadding: 20 } Pane { width: 400 height: 400 anchors.centerIn: parent palette.window: "#edf3f8" palette.windowText: "tomato" // This will have a pixelSize of 20 and be "tomato" in color. Label { text: "Pane Label" } Popup { width: 300 height: 300 anchors.centerIn: parent font.pixelSize: 10 visible: true // This will have a pixelSize of 10 and "steelblue" in color. Label { text: "Popup Label" } Popup { width: 200 height: 200 anchors.centerIn: parent visible: true // This will have a pixelSize of 20 and be "steelblue" in color. Label { text: "Child Popup Label" } } } } }
此外,弹出窗口不会将其属性传播到子弹出窗口。此行为与Qt Widgets中的行为类似,其中Qt::Popup
小部件是一个顶层窗口。顶层窗口不会将它们的属性传播到子窗口。
某些派生类型,如ComboBox,通常是这样实现的,即认为弹出窗口是控件的一个整体部分,因此可能会继承一些东西,如附加属性。例如,在Material样式的ComboBox中,主题和其他附加属性是从本身显式继承的Popup。
popup: T.Popup { // ... Material.theme: control.Material.theme Material.accent: control.Material.accent Material.primary: control.Material.primary }
因此,为了确保子弹出窗口与其父弹出窗口具有相同的属性值,请显式设置这些属性
也见Popup控件,定制弹出窗口和ApplicationWindow。
属性文档
activeFocus : bool |
此属性表示弹出窗口是否有活动焦点。
anchors.centerIn : Item |
锚点提供了一种通过指定与其他项目的关系来定位项目的方法。
一个常见的用例是在其父元素中居中对齐弹出窗口。一种实现方式是使用 x 和 y 属性。锚点提供了一个更方便的方法。
也可以使用 Overlay 来在窗口中居中对齐弹出窗口。
ApplicationWindow { id: window // ... Pane { // ... Popup { anchors.centerIn: Overlay.overlay } } }
这使得从任何组件中居中对齐弹出窗口变得非常简单。
注意:弹出窗口只能在其直接父元素或窗口叠加层中居中对齐;尝试在其他项目中对齐将产生警告。
这个属性是在 QtQuick.Controls 2.5(Qt 5.12)中引入的。
另请参阅:弹出窗口定位、锚点 以及 在属性声明中使用 Qt Quick Controls 类型。
availableHeight : real |
此属性包含在弹出窗口的 contentItem 的高度,减去弹出窗口的高度属性 height 中的垂直填充。
availableWidth : real |
此属性包含在弹出窗口的 contentItem 的宽度,减去弹出窗口的宽度属性 width 中的水平填充。
background : Item |
bottomInset : real |
bottomMargin : real |
bottomPadding : real |
此属性包含下填充。除非明确设置,否则其值等于 verticalPadding
。
填充属性用于控制 content item 的几何形状。
clip : bool |
此属性表示是否启用裁剪。默认值为false
。
closePolicy : enumeration |
此属性决定弹出窗口关闭的情况。可以组合标志以允许弹出窗口的多种关闭方式。
可用的值包括
常量 | 描述 |
---|---|
Popup.NoAutoClose | 只有手动指示时才会关闭弹出窗口。 |
Popup.CloseOnPressOutside | 鼠标在弹出窗口外部按下时关闭弹出窗口。 |
Popup.CloseOnPressOutsideParent | 鼠标在其父级外部按下时关闭弹出窗口。 |
Popup.CloseOnReleaseOutside | 鼠标在弹出窗口外部释放时关闭弹出窗口。 |
Popup.CloseOnReleaseOutsideParent | 鼠标在其父级外部释放时关闭弹出窗口。 |
Popup.CloseOnEscape | 在弹出窗口具有活动焦点时按下escape键关闭弹出窗口。 |
CloseOnPress*
和CloseOnRelease*
策略仅适用于弹出窗口外部的活动。也就是说,如果有两个弹出窗口同时打开,第一个窗口设置有Popup.CloseOnPressOutside
作为其策略,点击第二个窗口不会导致第一个窗口关闭。
默认值为Popup.CloseOnEscape | Popup.CloseOnPressOutside
。
注意: 已知限制是Popup.CloseOnReleaseOutside
和Popup.CloseOnReleaseOutsideParent
策略仅适用于模态弹出窗口。
此属性包含内容子项列表。
列表包含在QML中声明为弹出窗口子项的所有项。
注意: 与contentData
不同,contentChildren
不包括非视觉QML对象。
另请参阅 Item::children和contentData。
此属性包含内容数据列表。
列表包含在QML中声明为弹出窗口子项的所有对象。
注意: 与contentChildren
不同,contentData
包括非视觉QML对象。
另请参阅 Item::data和contentChildren。
contentHeight : real |
contentItem : Item |
contentWidth : real |
dim : bool |
enabled : bool |
enter : Transition |
此属性包含当弹出窗口打开并进入屏幕时应用于弹出窗口项的过渡效果。
以下示例展示了弹出窗口进入屏幕时如何动画其不透明度
Popup { enter: Transition { NumberAnimation { property: "opacity"; from: 0.0; to: 1.0 } } }
另请参阅:exit.
exit : Transition |
此属性包含当弹出窗口关闭并退出屏幕时应用于弹出窗口项的过渡效果。
以下示例展示了弹出窗口退出屏幕时如何动画其不透明度
Popup { exit: Transition { NumberAnimation { property: "opacity"; from: 1.0; to: 0.0 } } }
另请参阅:enter.
focus : bool |
此属性包含弹出窗口是否想要焦点。
当弹出窗口实际获得焦点时,activeFocus将设置为true
。有关更多信息,请参阅Qt Quick 中的键盘焦点。
默认值是false
。
另请参阅:activeFocus.
font : font |
height : real |
此属性包含弹出窗口的高度。
horizontalPadding : real |
此属性包含水平边距。除非显式设置,否则值等于padding
。
填充属性用于控制 content item 的几何形状。
弹窗使用与控件相同的填充方式。有关填充系统的视觉描述,请参阅文档中的控件布局部分。
这个属性是在 QtQuick.Controls 2.5(Qt 5.12)中引入的。
implicitBackgroundHeight : 实数 |
该属性保存隐式背景高度。
该值等于 background ? background.implicitHeight : 0
。
这个属性是在 QtQuick.Controls 2.5(Qt 5.12)中引入的。
implicitBackgroundWidth : 实数 |
该属性保存隐式背景宽度。
该值等于 background ? background.implicitWidth : 0
。
这个属性是在 QtQuick.Controls 2.5(Qt 5.12)中引入的。
implicitContentHeight : 实数 |
该属性保存隐式内容高度。
该值根据内容子节点计算。
这个属性是在 QtQuick.Controls 2.5(Qt 5.12)中引入的。
implicitContentWidth : 实数 |
该属性保存隐式内容宽度。
该值根据内容子节点计算。
这个属性是在 QtQuick.Controls 2.5(Qt 5.12)中引入的。
implicitHeight : 实数 |
该属性保存弹出窗口的隐式高度。
implicitWidth : 实数 |
该属性保存弹出窗口的隐式宽度。
leftInset : 实数 |
leftMargin : 实数 |
leftPadding : 实数 |
该属性保存左侧填充。除非明确设置,否则值等于 horizontalPadding
。
填充属性用于控制 content item 的几何形状。
弹窗使用与控件相同的填充方式。有关填充系统的视觉描述,请参阅文档中的控件布局部分。
另请参阅 padding、rightPadding、horizontalPadding 和 availableWidth。
margins : 实数 |
此属性存储弹出窗口边缘与其窗口边缘之间的距离。
带有负边距的弹出窗口不会被推动到包围窗口的边界内。默认值是 -1
。
另请参阅topMargin、leftMargin、rightMargin、bottomMargin 以及 Popup 布局。
mirrored : bool |
modal : bool |
此属性存储弹出窗口是否为模态。
模态弹出窗口通常在 Overlay.modal 中定义了一个独特的背景变暗效果,并且不允许按下或释放事件传递到它们下面的项目。例如,如果用户不小心点击弹出窗口之外的地方,该位置的点击不会通过该弹出窗口传递到下面的任何项目。
在桌面平台上,模态弹出窗口通常仅在按下Esc键时关闭。为了实现此行为,将 closePolicy 设置为 Popup.CloseOnEscape
。默认情况下,closePolicy
设置为 Popup.CloseOnEscape | Popup.CloseOnPressOutside
,这意味着点击模态弹出窗口之外将关闭它。
默认值是false
。
另请参阅dim。
opened : bool |
padding : real |
此属性存储默认填充。
填充属性用于控制 content item 的几何形状。
弹窗使用与控件相同的填充方式。有关填充系统的视觉描述,请参阅文档中的控件布局部分。
另请参阅availableWidth、availableHeight、topPadding、leftPadding、rightPadding 和 bottomPadding。
palette : palette |
父对象 : Item |
此属性保存父项。
rightInset : 实数 |
rightMargin : 实数 |
rightPadding : 实数 |
此属性保存右侧填充。除非显式设置,否则该值等于horizontalPadding
。
填充属性用于控制 content item 的几何形状。
scale : 实数 |
此属性保存弹出窗口的缩放因子。默认值为1.0
。
小于1.0
的缩放将使弹出窗口以更小的尺寸渲染,而大于1.0
的缩放将使弹出窗口以更大的尺寸渲染。不支持负缩放。
spacing : 实数 |
此属性保存间隙距离。
间隙对于具有多个或重复构建块的弹出窗口很有用。例如,某些样式使用间隙来确定对话框的标题、内容和页脚之间的距离。Popup不会强制实施间隙,因此每种样式可能有不同的解释,有些可能完全忽略。
此属性自 QtQuick.Controls 2.1 (Qt 5.8) 引入。
topInset : 实数 |
topMargin : 实数 |
topPadding : 实数 |
此属性保存顶部填充。除非显式设置,否则值等于verticalPadding
。
填充属性用于控制 content item 的几何形状。
transformOrigin : 枚举 |
verticalPadding : real |
该属性包含垂直填充。除非显式设置,否则值等于 padding
。
填充属性用于控制 content item 的几何形状。
弹窗使用与控件相同的填充方式。有关填充系统的视觉描述,请参阅文档中的控件布局部分。
这个属性是在 QtQuick.Controls 2.5(Qt 5.12)中引入的。
width : real |
该属性包含弹出窗口的宽度。
z : real |
信号文档
void aboutToHide() |
void aboutToShow() |
void closed() |
void opened() |
方法文档
void close() |
关闭弹出窗口。
另请参阅visible。
forceActiveFocus(枚举 原因 = Qt.OtherFocusReason) |
void open() |
打开弹出窗口。
另请参阅visible。
© 2024 Qt 公司。此处包含的文档贡献为各自所有者的版权。提供的文档受GNU 自由文档许可协议版本 1.3的条款约束,该协议由自由软件基金会发布。Qt及其相应标志是芬兰和/或其他国家和地区Qt公司的商标。所有其他商标均为各自所有者的财产。