窗口 QML 类型

创建一个新顶级窗口。 更多信息...

导入语句import QtQuick
实例化 QQuickWindow

属性

附加属性

信号

方法

详细说明

Window对象为Qt Quick场景创建一个新的顶层窗口。它自动设置窗口以用于与Qt Quick图形类型。

窗口可以声明在Item内部或另一个Window内部,在这种情况下,内部窗口将自动成为外部窗口的“临时父窗口”,外部窗口作为其临时父。在此情况下,大多数平台将在外部窗口中居中显示窗口,并且可能存在其他平台相关的行为,这还取决于标志。如果嵌套窗口旨在成为应用中的对话框,您还应该将标志设置为Qt.Dialog,因为某些窗口管理器在缺少该标志的情况下不会提供居中行为。

您还可以在顶级QtObject内部声明多个窗口,在这种情况下,窗口之间没有临时关系。

或者,您可以将xy绑定来显式在屏幕上定位窗口。

当用户尝试关闭窗口时,将发射关闭信号。您可以通过写入一个onClosing处理器来强制窗口保持打开状态(例如提示用户保存更改),除非安全关闭窗口(例如,因为没有未保存的更改)。

onClosing: (close) => {
    if (document.changed) {
        close.accepted = false
        confirmExitPopup.open()
    }
}

// The confirmExitPopup allows user to save or discard the document,
// or to cancel the closing.

样式

与Qt Quick中所有视觉类型一样,Window支持调色板。然而,与Text等类型一样,Window默认不使用调色板。例如,要更改操作系统主题更改时窗口的背景颜色,必须设置颜色

Window {
    visible: true

    // here we use the Window.active and Window.palette ordinary properties
    color: active ? palette.active.window : palette.inactive.window

    Text {
        anchors.centerIn: parent
        // here we use the Window.active attached property and the Item.palette property
        color: Window.active ? palette.active.windowText : palette.inactive.windowText
        text: Window.active ? "active" : "inactive"
    }
}

使用ApplicationWindow(和Label)从Qt Quick Controls代替Window以获得自动样式。

属性文档

height : int

width : int

x : int

y : int

定义窗口的位置和大小。

(x,y)位置在只有一个屏幕时相对于Screen,或者相对于虚拟桌面(多个屏幕的排列)。

注意:并非所有窗口系统都支持设置或查询顶级窗口的位置。在这样的系统中,程序性地移动窗口可能没有任何效果,并且可能会返回当前位置的虚假值,如QPoint(0, 0)

Window { x: 100; y: 100; width: 100; height: 100 }


minimumHeight : int

minimumWidth : int

定义窗口的最小大小。

这是向窗口管理器提供的一个提示,用于防止窗口大小小于指定的宽度和高度。


maximumHeight : int

maximumWidth : int

定义窗口的最大大小。

这是向窗口管理器提供的一个提示,用于防止窗口大小超过指定的宽度和高度。


active : bool [只读]

窗口的激活状态。

Window {
    visible: true

    // here we use the Window.active and Window.palette ordinary properties
    color: active ? palette.active.window : palette.inactive.window
}

另请参阅 requestActivate()。


activeFocusItem : Item [只读]

当前具有活动焦点或如果没有则返回 null 的项目。


color : color

窗口的背景颜色。

设置此属性比使用单独的 Rectangle 更有效率。

注意: 如果您将颜色设置为 "transparent" 或具有半透明色的颜色,您还应该设置合适的 flags,例如 flags: Qt.FramelessWindowHint。否则,窗口的半透明性可能在所有平台上均不能得到一致启用。


contentItem : Item [只读]

场景的无视根项。


contentOrientation : Qt::ScreenOrientation

这是在需要显示有关窗口的相关附加内容(如弹出窗口、对话框、状态栏等)时给窗口管理器的一个提示。

推荐的朝向是 Screen.orientation,但应用程序不必支持所有可能的方向,因此可以选择忽略当前屏幕朝向。

窗口朝向与内容朝向之间的差异确定内容旋转的角度。

默认值是 Qt::PrimaryOrientation

另请参阅 Screen


data : list< QtObject> [默认]

数据属性允许您在窗口中自由混合视觉子项、资源和其他窗口。

如果您将另一个窗口分配给数据列表,则嵌套窗口将变成外部窗口的“暂存窗口”。

如果您将一个 Item 分配给数据列表,它将成为窗口的 contentItem 的子项,因此它将出现在窗口内部。该项目的父项将是窗口的 contentItem,这是该窗口中项目所有权树的根。

如果您将其他类型的任何对象分配,它将作为资源添加。

通常不需要引用 data 属性,因为它对 Window 是默认属性,因此所有子项都自动分配到该属性。

另请参阅 QWindow::transientParent()。


flags : Qt::WindowFlags

窗口的窗口标志。

窗口标志控制窗口在窗口系统中的外观,包括它是一个对话框、弹出窗口还是常规窗口,以及它是否应该有标题栏等。

从该属性中读取的标志可能与你设置的标志不同,如果请求的标志无法满足。

import QtQuick

Window {
    id: mainWindow
    title: "Main Window"
    color: "#456"
    property real defaultSpacing: 10

    property Splash splash: Splash {
        onTimeout: mainWindow.show()
    }

    component Splash: Window {
        id: splash

        // a splash screen has no titlebar
        flags: Qt.SplashScreen
        // the transparent color lets background behind the image edges show through
        color: "transparent"
        modality: Qt.ApplicationModal // in case another application window is showing
        title: "Splash Window" // for the taskbar/dock, task switcher etc.
        visible: true

        // here we use the Screen attached property to center the splash window
        x: (Screen.width - splashImage.width) / 2
        y: (Screen.height - splashImage.height) / 2
        width: splashImage.width
        height: splashImage.height

        property int timeoutInterval: 2000
        signal timeout

        Image {
            id: splashImage
            source: "images/qt-logo.png"
        }

        TapHandler {
            onTapped: splash.timeout()
        }

        Timer {
            interval: splash.timeoutInterval; running: true; repeat: false
            onTriggered: {
                splash.visible = false
                splash.timeout()
            }
        }
    }
}

另请参阅 Qt::WindowFlagsQt Quick 示例 - 窗口和屏幕


modality : Qt::WindowModality

窗口的模态。

模态窗口会阻止其他窗口接收输入事件。可能的值有 Qt.NonModal(默认值),Qt.WindowModal 和 Qt.ApplicationModal。


opacity : real

窗口的不透明度。

如果窗口系统支持窗口不透明度,可以用来淡入淡出窗口,或使其半透明。

值为1.0或以上被视为完全不透明,而值为0.0或以下被视为完全透明。介于两者之间的值表示两者之间不同程度的半透明度。

默认值为1.0。


palette : Palette [since 6.0]

该属性包含当前为窗口设置的调色板。

默认调色板取决于系统环境。 QGuiApplication 维护一个系统/主题调色板,作为所有应用程序窗口的默认值。你还可以通过将自定义调色板传递给 QGuiApplication::setPalette(),在加载任何 QML 之前设置窗口的默认调色板。

窗口将显式调色板属性传播到子项和控制,覆盖该属性的任何系统默认值。

import QtQuick
import QtQuick.Controls

Window {
    visible: true

    // here we use the Window.active and Window.palette ordinary properties
    color: active ? palette.active.window : palette.inactive.window

    // colors that are not customized here come from SystemPalette
    palette.active.window: "peachpuff"
    palette.windowText: "brown"

    Text {
        anchors.centerIn: parent
        // here we use the Window.active attached property and the Item.palette property
        color: Window.active ? palette.active.windowText : palette.inactive.windowText
        text: Window.active ? "active" : "inactive"
    }

    Button {
        text: "Button"
        anchors {
            bottom: parent.bottom
            bottomMargin: 6
            horizontalCenter: parent.horizontalCenter
        }
    }
}

此属性自 Qt 6.0 介绍以来。

另请参阅 Item::palettePopup::paletteColorGroupSystemPalette


parent : var [preliminary]

该属性正在开发中,并可能发生变化。

该属性包含窗口的视觉父项。

视觉父项可以是另一个窗口或项。

具有视觉父项的窗口将使窗口成为其视觉父项的子窗口,无论是直接如果是另一个窗口,还是间接通过视觉父项项的窗口。

就像 QtQuick::Item::parent 一样,窗口将相对于其视觉父项定位。

同级窗口之间的堆叠顺序遵循文档顺序,就像项一样,但可以通过窗口的 z-order 属性进行自定义。

在窗口上设置视觉父项将优先于 transient parent

此属性自 Qt 6.7 介绍以来。

另请参阅 概念 - Qt Quick 中的视觉父项transientParent


screen : variant

与窗口关联的屏幕。

如果在显示窗口之前指定,将在该屏幕上显示窗口,除非已设置显式窗口位置。值必须是 Qt.application.screens 数组中的元素。

注意:为了确保在创建基本本机窗口时窗口与所需的屏幕关联,请尽早设置此属性,并确保其值的设置不被延迟。在嵌入了窗口系统的平台上,这可能特别重要,因为在任何时候只允许每个屏幕有一个窗口。在新屏幕是旧屏幕同一虚拟桌面的一部分时,在创建窗口后设置屏幕不会移动窗口。

另请参阅 QWindow::setScreen(),QWindow::screen(),QScreen,和Qt.application


title : string

窗口在窗口系统中的标题。

根据窗口系统和窗口标志,窗口标题可能出现在窗口装饰的标题区域中。它还可能被窗口系统用于在其他上下文中标识窗口,例如在任务切换器中。


transientParent : QWindow

此窗口是该窗口的暂时弹出窗口。

这是给窗口管理器的一个提示,说明此窗口是代表暂时父窗口的对话或弹出窗口。这通常意味着在最初显示时,暂时窗口将位于暂时父窗口的上方,当缩减父窗口时也会缩放暂时窗口,等等;但是,结果因平台而异。

通过默认属性或专用属性,在项目或另一个窗口内声明窗口,无论是通过 default property 还是其他属性,都会自动设置与包含窗口的暂时父关系,除非明确定义了 transientParent 属性。这同样适用于通过 Qt.createComponentQt.createQmlObject 创建 Window 项目,只要将项目或窗口作为 parent 参数传入。

具有暂时父窗口的窗口不会显示,直到暂时父窗口显示,即使 visible 属性被设置为 true。这同样适用于上述自动暂时父关系。特别是,如果窗口的包含元素是项目,那么窗口将通过其 视觉父层级 添加到场景中,才会显示。将 transientParent 设置为 null 将覆盖此行为。

Window {
    // visible is false by default
    Window {
        transientParent: null
        visible: true
    }
}

为了使窗口默认居中显示在其暂时父窗口上方,根据窗口管理器的不同,可能还需要设置 Window::flags 属性与合适的 Qt::WindowType(例如 Qt::Dialog)。

如果在窗口上设置了 视觉父,则视觉父父将具有优先权,超过 transientParent。

另请参阅 QtQuick::Window::parent


visibility : QWindow::Visibility

窗口的屏幕占用状态。

可见性是指窗口是否应在窗口系统中以正常、最小化、最大化、全屏或隐藏的方式出现。

将可见性设置为 AutomaticVisibility 意味着给窗口一个默认的可见状态,这可能是 FullScreenWindowed,具体取决于平台。但是,在读取可见性属性时,您将始终获得实际状态,而不是 AutomaticVisibility

当窗口不可见时,它的可见性为隐藏,将可见性设置为隐藏与将visible设置为false相同。

import QtQuick
import QtQuick.Controls

Window {
    id: win
    flags: Qt.Window | Qt.WindowFullscreenButtonHint
    visibility: fullscreenButton.checked ? Window.FullScreen : Window.Windowed

    Button {
        id: fullscreenButton
        anchors {
            right: parent.right
            top: parent.top
            margins: 6
        }
        width: height
        checkable: true
        Binding on checked { value: win.visibility === Window.FullScreen }
        text: "⛶"
        ToolTip.visible: hovered
        ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval
        ToolTip.text: win.visibility === Window.FullScreen ? qsTr("restore") : qsTr("fill screen")
    }
}

另请参阅visibleQt Quick 示例 - 窗口和屏幕


visible : bool

窗口是否在屏幕上可见。

将visible设置为false与将visibility设置为隐藏相同。

默认值为false,除非通过设置visibility被覆盖。

另请参阅visibility


z : real [草案]

该属性正在开发中,并可能发生变化。

设置兄弟窗口的堆叠顺序。

默认的堆叠顺序为0。

堆叠值较高的窗口将在堆叠值较低的窗口之上绘制。属性值相同的窗口将在QML文档中出现顺序中从下而上绘制。

注意: 此属性仅对子窗口有效。

另请参阅QtQuick::Item::z


附加属性文档

Window.height : int

Window.width : int

这些附加属性保留项目的窗口大小。Window附加属性可以附加到任何项目。


Window.active : bool [只读]

此附加属性表示窗口是否处于活动状态。Window附加属性可以附加到任何项目。

以下是一个示例,它更改标签以显示窗口的活动状态

import QtQuick

Text {
    text: Window.active ? "active" : "inactive"
}

Window.activeFocusItem : Item [只读]

此附加属性保存当前具有活动焦点或如果不存在具有活动焦点的项目则为null的元素。Window附加属性可以附加到任何项目。


Window.contentItem : Item [只读]

此附加属性保存场景的无形根元素或如果项目不在窗口中则为null。Window附加属性可以附加到任何项目。


Window.visibility : QWindow::Visibility [只读]

此附加属性保存窗口是否当前以通常、最小化、最大化、全屏或隐藏的方式在窗口系统中显示。Window附加属性可以附加到任何项目。如果项目不在任何窗口中显示,值将为隐藏

另请参阅visiblevisibility


Window.window : Window

此附加属性保存项目的窗口。Window附加属性可以附加到任何项目。


信号文档

afterAnimating()

在请求渲染线程同步场景图之前,在GUI线程上发出此信号。

您可以在onAfterAnimating中实现,在每次动画步骤之后执行额外的处理。

注意:相应的处理器是onAfterAnimating


closing(CloseEvent close)

当用户尝试关闭窗口时会发出此信号。

此信号包含一个close参数。默认情况下,close.accepted属性为true,因此允许窗口关闭;但是在窗口关闭之前需要执行其他操作时,您可以实现一个onClosing处理器,并设置close.accepted = false

注意:相应的处理器是onClosing


frameSwapped()

当已经将一个框架排队以进行呈现时发出此信号。启用垂直同步时,在持续动画的场景中,此信号在每个vync间隔最多次发出。

注意:相应的处理器是onFrameSwapped


sceneGraphError(SceneGraphError error, QString message)

在场景图初始化期间发生错误时发出此信号。

您可以通过实现onSceneGraphError(error, message)以自定义方式处理错误,例如图形上下文创建失败。如果未连接此信号的处理器,Quick将打印消息或显示消息框,并终止应用程序。

注意:相应的处理器是onSceneGraphError


方法文档

alert(int msec)

使警报显示msec毫秒。如果msec0(默认值),则警报将无限期显示,直到窗口再次处于活动状态。

在警报状态下,窗口会表明它需要注意,例如通过闪烁或弹跳任务栏条目。


close()

关闭窗口。

当调用此方法或用户通过标题栏按钮尝试关闭窗口时,将发出closing信号。如果没有处理器,或处理器没有撤销关闭权限,则随后会关闭窗口。如果QGuiApplication::quitOnLastWindowClosed属性为true,且没有其他打开的窗口,则应用程序将退出。


hide()

隐藏窗口。

等同于将visible设置为false或将visibility设置为Hidden

另请参阅:show


lower()

将窗口在窗口系统中降低位置。

请求将窗口降低到其他窗口之下出现。


raise()

将窗口在窗口系统中提升。

请求将窗口提升到其他窗口之上出现。


requestActivate()

请求激活窗口,即接收键盘焦点。


show()

显示窗口。

这取决于平台对窗口类型和标志的默认行为,等效于调用showFullScreenshowMaximizedshowNormal

另请参阅:showFullScreenshowMaximizedshowNormalhideQQuickItem::flags


showFullScreen()

以全屏方式显示窗口。

等同于将visibility设置为FullScreen


showMaximized()

以最大化方式显示窗口。

等同于将 可见性 设置为 最大化


showMinimized()

显示为最小化窗口。

等同于将 可见性 设置为 最小化


showNormal()

显示为正常窗口,即既不是最大化,也不是最小化,也不是全屏。

等同于将 可见性 设置为 窗口


© 2024 Qt 公司。此处包含的文档贡献归属于各自的所有者。提供的文档是在自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款下授权的。Qt 及其相关标志是芬兰的 Qt 公司以及在全世界其他国家的商标。所有其他商标均属于其各自的所有者。