QtQuick 2透明窗口背景



我一直在寻找如何使背景我的QtQuick 2.0应用程序透明。我找到的大多数答案都使用QtDeclarative,它适用于QtQuick 1.0,但不适用于QtQuick 2。

最后我找到了一个答案,我会张贴,但我想知道是否有一个更好/更简单/更小的方法来实现这个任务。

注意*

我想让窗口的背景透明。有些人建议使用setOpacity,但这会使所有的qml元素透明。

我在billouparis的http://qt-project.org/forums/viewthread/18984/#106629帖子中找到了一个解决方案。他使用由QtCreator生成的主应用程序模板,这非常方便。注意:我稍微改变了一下原始代码,使其更小。

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <QSurface>
#include <QSurfaceFormat>
#include <QDebug>
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QtQuick2ApplicationViewer viewer;
    // Make Background Transparent Start
    viewer.setSurfaceType(QSurface::OpenGLSurface);
    QSurfaceFormat format;
    format.setAlphaBufferSize(8);
    format.setRenderableType(QSurfaceFormat::OpenGL);
    viewer.setFormat(format);
    viewer.setColor(QColor(Qt::transparent));
    viewer.setClearBeforeRendering(true);
    // Make Background Transparent Stop
    viewer.setMainQmlFile(QStringLiteral("qml/myProject/main.qml"));
    viewer.showExpanded();
    return app.exec();
}

还要确保根qml元素有一个alpha颜色(Qt.rgba)

下面是一个使用纯qml获取无框架透明窗口的示例

import QtQuick 2.2
import QtQuick.Window 2.0
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
ApplicationWindow {
    id: backlight
    flags: Qt.FramelessWindowHint
    visible: true
    title: qsTr("backlight")
    width: 500
    height: 50
    x: (Screen.width - width) / 2
    y: (Screen.height - height) / 2
    color: "transparent"
    property real slideValue
    signal onSlide(real value)
    Rectangle {
        anchors.centerIn: parent
        width: parent.width
        height: 50
        color: "transparent"
        Rectangle {
            anchors.fill: parent
            radius: 25
            opacity: 0.3
            color: "gray"
        }
        Slider {
            anchors.centerIn: parent
            width: backlight.width - 16
            height: backlight.height
            value: backlight.slideValue
            focus: true
            onValueChanged: backlight.onSlide(value)
            Keys.onSpacePressed: Qt.quit()
            Keys.onEscapePressed: Qt.quit()
            style: SliderStyle {
                groove: Rectangle {
                    implicitHeight: 8
                    radius: 4
                    color: "gray"
                }
                handle: Rectangle {
                    anchors.centerIn: parent
                    color: control.pressed ? "white" : "lightgray"
                    border.color: "gray"
                    border.width: 2
                    width: 34
                    height: 34
                    radius: 17
                }
            }
        }
    }
} 

试试这个

import QtQuick 2.2
import QtQuick.Window 2.0

 Window {
    id: backlight
    visible: true
    title: qsTr("backlight")
    width: 500
    height: 50
    x: (Screen.width - width) / 2
    y: (Screen.height - height) / 2
    color: "transparent"

    }

相关内容

  • 没有找到相关文章

最新更新