qml 无框窗口的阴影

Dco*_*cow 3 qt qml

我有由ApplicationWindow {..}qml创建的无框架主窗口(在我的 main.qml 文件中)我通过QQmlApplicationEngine::load(Qt5.1 中引入的类)实例化qml。如果我设置了Qt.FramelessWindowHint标志,则窗口是无框的,但会丢失阴影(在 Windows 中)。如何为我的窗口添加阴影?

我的窗口列表:

ApplicationWindow {
    id: rootWindow
    color : "#f8f8f8"
    maximumHeight: 445
    minimumHeight: 445
    minimumWidth: 730
    maximumWidth: 730
    flags  : Qt.FramelessWindowHint  |  Qt.Window

    Component.onCompleted: {
        setHeight(455)
        setWidth(740)
    }

    MainObject{
            id:mainObject1
            anchors.fill: parent
            height:445
            width:730
    }


}
Run Code Online (Sandbox Code Playgroud)

dte*_*ech 5

解决方案是将阴影部分集成到应用程序中,这样您就可以禁用 WM 装饰并且仍然有装饰,并且在不同平台之间保持一致。

在下面的例子中,窗口有一个阴影,它甚至可以在移动时创建动画以创建将窗口抬起的效果。当窗口最大化时,边距被移除,阴影因此不再可见。

import QtQuick 2.7
import QtQuick.Controls 2.1
import QtGraphicalEffects 1.0
import QtQuick.Window 2.3

ApplicationWindow {
    id: main
    visible: true
    width: 300
    height: 200
    color: "#00000000"
    flags: Qt.FramelessWindowHint | Qt.Window

    Rectangle {
      id: rect
      anchors.fill: parent
      anchors.margins: main.visibility === Window.FullScreen ? 0 : 10
      MouseArea {
        id: ma
        anchors.fill: parent
        property int dx
        property int dy
        onPressed: { dx = mouseX; dy = mouseY }
        onPositionChanged: {
          main.x += mouseX - dx
          main.y += mouseY - dy
        }
        onDoubleClicked: main.visibility = main.visibility === Window.FullScreen ? Window.AutomaticVisibility : Window.FullScreen
      }
    }

    DropShadow {
      anchors.fill: rect
      horizontalOffset: 1
      verticalOffset: 1
      radius: ma.pressed ? 8 : 5
      samples: 10
      source: rect
      color: "black"
      Behavior on radius { PropertyAnimation { duration: 100 } }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明