Qt5和QtQuick2 - 透明主窗口

8

我尝试创建一个具有无边框窗口和圆角的简单Qt UI。从使用“QtQuick 2应用程序”模板的新项目开始,我的代码如下:

main.cpp

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QtQuick2ApplicationViewer viewer;

    viewer.setMainQmlFile(QStringLiteral("qml/qtquick-test/main.qml"));
    viewer.setFlags(Qt::FramelessWindowHint);
    viewer.showExpanded();

    return app.exec();
}

main.qml

import QtQuick 2.0

Rectangle {
    width: 360
    height: 360
    radius: 10
    color: "red"

    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
}

这是结果: And this is the result 我想要做的是通过使主窗口透明来去除白色角落。然而,据我所知,在Qt5中没有办法做到这一点,因为我们没有样式表等,并且我也不使用QtWidget。我应该使用QtWidget吗?
顺便说一下,我是新手,对Qt和Qt5都不熟悉。

看起来这个问题可能会在5.1中解决,通过使用QWidget::createWindowContainer()创建一个小部件作为容器窗口。请参见错误报告提交记录。我将尝试从源代码编译5.1并查看是否可以使其正常工作。 - andrewrjones
@andrewrjones 你可以回答并接受自己的问题。 - Motti Strom
@MottiStrom 从未找到答案,转而使用其他东西。 - andrewrjones
4个回答

5
在Windows 8和Ubuntu 12.04中,这对我有效。
import QtQuick 2.3
import QtQuick.Window 2.2

Window {
    width: 300
    height: 300
    flags: Qt.FramelessWindowHint | Qt.Window
    color: "transparent"

    Rectangle {
        color: "brown"
        anchors.fill: parent
        anchors.margins: 10
    }
}

谢谢Marcus!就是这样了。在Mac上,我只需要将visible: true添加到窗口中,将radius: 10添加到矩形中,我就得到了我想要的效果。我将其作为示例项目上传到GitHub:https://github.com/andrewrjones/qt-transparent-main-window - andrewrjones
太好了,很高兴它能正常工作。 :) 谢谢你在你的存储库中提到了我。 - Marcus Ottosson

0

对于像我这样晚来到这里的人。至少对于C++和Python,您必须指定widget属性WA_TranslucentBackground才能使背景透明。


-1

你必须使用
viewer.setMask()
来告诉显示QML的Qt小部件在哪里绘制和不绘制...

我主要使用矩形遮罩,但setMask接受QRegion,我认为它支持更复杂的形状甚至是位图遮罩。


-2

将应用程序查看器的背景清除颜色设置为 alpha 值为 0:

viewer.setColor(QColor(0, 0, 0, 0));

2
这在Qt 5.0上不起作用。你会得到一个黑色背景,而不是透明的。 - nixeagle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接