QT 使用QSS 设置透明效果时,当QDocketWidget 为docked状态时透明效果是生效的
QSS设置为:
QMainWindow {
background-color:rgb(255,0,0)
}
QMainWindow>QWidget{
background-color:rgba(0,255,0,0)
}
QDockWidget{
background-color:rgba(125,0,0,0)
}
QDockWidget>QWidget{
background-color:rgba(125,0,0,0)
}
QTreeWidget{
background-color:rgba(125,0,0,0)
}
但是当窗户float出来时,会有黑色背景
解决办法:
给QDockWidget 设置自定义头
同时设置QDockWidget窗口属性:
WA_TranslucentBackground
WA_NoSystemBackground
mytitle为自定义的一个窗口
最终效果如图
左边未设置的QDockWidget 右边为我们想要的效果:
但是发现弹出的窗口虽然透明了但是 鼠标穿透导致 透明窗口无法执行操作
解决办法:设置QSS 透明不要设置未完全透明
改为:
QMainWindow {
background-color:rgb(255,0,0)
}
QMainWindow>QWidget{
background-color:rgba(0,255,0,30)
}
QDockWidget{
background-color:rgba(125,0,0,60)
}
QDockWidget>QWidget{
background-color:rgba(125,0,0,60)
}
QTreeWidget{
background-color:rgba(125,0,0,60)
}
此时效果为:
此时已经达到我们想要的效果我们
但是当我们2个窗口 设置为float后 两个窗口的效果都是透明的,但是合并在一起后发现透明效果消失了:
将2个QDockWidget都设置为自定义头
将2个窗户合并后发现还是无法透明:
原因是弹出的窗口合并后会有一个QDockWidgetGroupWindow类窗口管理,因此我们需要设置QDockWidgetGroupWindow的窗口属性,
解决办法:
添加event事件
效果如下:
但是当我们当我们的QMainWindow设置为GroupedDrading时候 ,在2个QDockWidget都为docked状态时合并,同时拖出来后发现窗户还是不透明
拖拽后
具体原因不清楚:
临时解决办法:
将所有子窗口都设置透明属性,虽然能达到效果,但是这样会影响其他子窗口,效果如下
待解决BUG:
当QDockWidget使用自定义头时,存在崩溃,具体描述如下:当我们将窗户合并后拖拽出来,如下图
同时双击 title 将两个QDockWidget 都浮动出来 同时拖动 QDockWidget 会出现一个黑色窗口,