Qt qml无框窗口的阴影
我有一个无框架主窗口,由qml创建(Qt qml无框窗口的阴影,qt,qml,Qt,Qml,我有一个无框架主窗口,由qml创建(ApplicationWindow{..}在我的main.qml文件中) 我通过QQmlApplicationEngine::load(Qt5.1中引入的类)实例化qml。 如果我设置了Qt.FramelessWindowHint标志,则窗口是无框架的,但会丢失阴影(在窗口中)。 如何为我的窗口添加阴影 我的窗口列表: ApplicationWindow { id: rootWindow color : "#f8f8f8" maximu
ApplicationWindow{..}
在我的main.qml文件中)
我通过QQmlApplicationEngine::load
(Qt5.1中引入的类)实例化qml。
如果我设置了Qt.FramelessWindowHint
标志,则窗口是无框架的,但会丢失阴影(在窗口中)。
如何为我的窗口添加阴影
我的窗口列表:
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
}
}
如果你指的是阴影效果,那就不是这样了
除了您刚才使用的无框窗口标志外,我们无法控制Qt中的WM装饰。这是非常具体的。Windows(TM)WM应用阴影效果装饰窗口,但这是Windows(TM)的选择。另外,您刚刚暗示它不应该装饰。解决方案是实现应用程序中的阴影部分,这样您就可以禁用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 } }
}
}
Windows(TM)WM将阴影效果应用于装饰过的窗口,如果我设置Qt.FramelessWindowHint阴影不应用于窗口。
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
ApplicationWindow{
id: window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
flags: Qt.Window | Qt.FramelessWindowHint
color: "#00000000"
Rectangle {
id: rect
anchors.fill: parent
anchors.margins: 10
radius: 5
}
DropShadow {
anchors.fill: rect
samples: 20
source: rect
color: "gray"
}
}