顶圆透明window

Top round transparent window

我目前正在学习QML,我想创建一个顶层透明window。

我构建了看起来像那样的东西,但由于多种原因它似乎是错误的。

这是我的代码:

Window {
    id: app
    visible: true
    width: 70
    height: 70

    flags: Qt.Window | Qt.FramelessWindowHint | Qt.WA_TranslucentBackground

    Rectangle {

        anchors.fill: parent
        radius: parent.width / 2.0

        color: "black"

        MouseArea {
            property point clickPos: "1,1"

            anchors.fill: parent
            drag.target: parent

            onPressed: {
                clickPos  = Qt.point(mouse.x,mouse.y)
            }

            onPositionChanged: {
                var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
                app.x += delta.x;
                app.y += delta.y;
            }

            onDoubleClicked: app.close()
        }
    }
}

在主体中使用这些标志:

QQuickWindow::setDefaultAlphaBuffer(true);

QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

主要问题是背景不透明

我认为是因为 'round' 矩形已完全绘制!?

我尝试了多个标记(Qt.Tool、Qt.Transparent、...),但 none 有效。

我想知道我是否开始做我想做的事(我想我没有),最好的方法是什么。

我看到了 qml 项目的剪辑 属性,但我也看到了性能问题。我不知道使用 属性.

是否是个好主意

我 运行 在 Qt 5.10 和 Win7 上使用 MSVC 作为编译器。

谢谢

编辑:为 window

添加透明背景颜色

添加一个答案,这样我就可以post一张图片向您证明您只需要设置颜色即可:

Window {
    id: app
    visible: true
    width: 70
    height: 70

    flags: Qt.Window | Qt.FramelessWindowHint

    color: "#00000000"

    Rectangle {

        anchors.fill: parent
        radius: parent.width / 2.0

        color: ma.pressed ? "red" : "black"

        MouseArea {
            id: ma
            property point clickPos: "1,1"

            anchors.fill: parent
            drag.target: parent

            onPressed: {
                clickPos  = Qt.point(mouse.x,mouse.y)
            }

            onPositionChanged: {
                var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
                app.x += delta.x;
                app.y += delta.y;
            }

            onDoubleClicked: app.close()
        }
    }
}

结果:

我没有使用你从 C++ 设置的任何标志,也许 setDefaultAlphaBuffer() 正在为你打破它。

我想通了。

在网上更深入地搜索并感谢@dtech,我发现了这个article

这和我的问题一模一样。但是如果没有@dtech,我永远不会想到显卡问题,这让我想到了这个解决方案。

您似乎需要在 windows 上启用 aero 模式才能在 Qt 上使用透明度。

我激活了航空模式,然后重试了给定的解决方案(@dtech 的解决方案),效果非常好。

编辑:这是 Qt

上众所周知的 "bug"

现在我有了解决方案,看起来很明显,但我以前没有考虑过。

谢谢大家