Qt 顶部圆形透明窗

Qt 顶部圆形透明窗,qt,window,qml,transparency,Qt,Window,Qml,Transparency,我目前正在学习QML,我想创建一个顶部圆形透明窗口 我已经构建了这样的东西,但由于多种原因,它似乎是错误的 这是我的密码: Window { id: app visible: true width: 70 height: 70 flags: Qt.Window | Qt.FramelessWindowHint | Qt.WA_TranslucentBackground Rectangle { anchors.fill: par

我目前正在学习QML,我想创建一个顶部圆形透明窗口

我已经构建了这样的东西,但由于多种原因,它似乎是错误的

这是我的密码:

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);
主要问题是背景不透明

我想这是因为“圆形”的矩形是完全画好的

我尝试了多个标志(Qt.Tool、Qt.Transparent等),但都不起作用

我想知道我开始做我想做的(我想我不想)是否很好,最好的方法是什么

我已经看到了qml项的clipping属性,但是我也看到了性能问题。我不知道使用那处房产是否是个好主意

我使用MSVC作为编译器在Qt5.10和Win7上运行

多谢各位

编辑:向窗口添加透明背景色


添加答案,这样我就可以发布一张图片,向您证明您所需要的只是设置颜色:

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++中设置的标志,也许是代码> SEDDEFALTALPHABUFER()/<代码>正在为你破解。< /P> < P>添加一个答案,这样我就可以发布一个图像来证明你所需要的是设置颜色:

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++中设置的标志,也许是代码> StEdDebug Tababuffe()/Cuth>正在为你破解它。

< P>我已经猜出来了。 我在网上更深入地搜索并通过thx发送到@dtech,我发现了这个

这和我的问题完全一样。但如果没有@dtech,我永远不会想到图形卡问题,这让我找到了这个解决方案

似乎您需要在windows上启用aero模式,以便能够在Qt上使用透明度

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

编辑:这是一个众所周知的“错误”上

现在我有了解决办法,这似乎很明显,但我以前没有考虑过

谢谢大家

我已经弄明白了

我在网上更深入地搜索并通过thx发送到@dtech,我发现了这个

这和我的问题完全一样。但如果没有@dtech,我永远不会想到图形卡问题,这让我找到了这个解决方案

似乎您需要在windows上启用aero模式,以便能够在Qt上使用透明度

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

编辑:这是一个众所周知的“错误”上

现在我有了解决办法,这似乎很明显,但我以前没有考虑过



谢谢大家

我不能打招呼,不知道为什么。。。所以我在这里说。你好,伙计你能试着把窗户的颜色设置成透明的吗?是的,我试过了。但是,正方形填满了整个窗户,不再是圆的了。窗户从来都不是圆的。你充其量只能制造一种错觉。为
窗口设置
颜色
,而不是矩形…@Felix仅仅因为它与窗口无关并不意味着它不会有任何效果。只是这不是一个期望的效果,因为它仍然只是一个数值,而且它仍然在被设置,因为Qt没有任何防止设置无关标志的措施。我不能打招呼,不知道为什么。。。所以我在这里说。你好,伙计你能试着把窗户的颜色设置成透明的吗?是的,我试过了。但是,正方形填满了整个窗户,不再是圆的了。窗户从来都不是圆的。你充其量只能制造一种错觉。为
窗口设置
颜色
,而不是矩形…@Felix仅仅因为它与窗口无关并不意味着它不会有任何效果。这不是期望的效果,因为它仍然只是一个数值,并且仍在设置中,因为Qt没有任何防止设置无关标志的保护措施。复制/粘贴代码并没有给我与您相同的输出。我的红环周围还有一个黑色的长方形。这很奇怪,我试图删除我的C++设置,但它仍然是一样的。你能发布你的main.cpp吗?它是一个新的空白项目的标准自动生成的main.cpp。也许你的项目没有重建。尝试全部清除/运行qmake/rebuild all.Done。没有什么变化。我有自动生成的QtQuickApplication的main(空的)。和你一样吗?这里有一个我所拥有的链接:好吧,在这种情况下,它可能是一些bug。我在Windows7和mingw上使用Qt5.11,但我在Qt的早期版本中使用了透明窗口,没有问题。我怀疑编译器是否会起作用。所以这可能是一个外部问题,比如说与图形卡驱动程序的不兼容。好吧,这很奇怪。我要在家里做些测试看看有没有变化。ThxCopy/粘贴您的代码并没有给我与您相同的输出。我的红环周围还有一个黑色的长方形。这很奇怪,我试图删除我的C++设置,但它仍然是一样的。你能发布你的main.cpp吗?它是一个新的空白项目的标准自动生成的main.cpp。也许你的项目没有重建。尝试全部清除/运行qmake/rebuild all.Done。没有什么变化。我有自动生成的QtQuickApplication的main(空的)。和你一样吗?这里有一个我所拥有的链接:好吧,在这种情况下,它可能是一些bug。我在Windows7和mingw上使用Qt5.11,但我在Qt的早期版本中使用了透明窗口,没有问题。我怀疑编译器是否会起作用。所以这可能是一个外部问题,比如说与图形卡驱动程序的不兼容。好吧,这很奇怪。我要在家里做些测试看看有没有变化。谢谢