Qt5 & QtQuick2 - 透明主窗口

Posted

技术标签:

【中文标题】Qt5 & QtQuick2 - 透明主窗口【英文标题】:Qt5 & QtQuick2 - transparent main window 【发布时间】:2013-02-08 20:07:33 【问题描述】:

我正在尝试创建一个带有无框窗口和圆角的简单 Qt UI。从具有 QtQuick 2 Application 模板的新项目开始,我的代码如下所示:

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();
        
    

结果如下:

我不想做的是通过使主窗口透明来摆脱白色角落。但是,据我所知,Qt5 中没有办法做到这一点,因为我们没有样式表等,而且我没有使用 QtWidget。我应该使用 QtWidget 吗?

顺便说一句,我是 Qt 和 Qt5 的新手。

【问题讨论】:

看起来这可能在 5.1 中通过使用 QWidget::createWindowContainer() 创建一个小部件作为容器窗口来解决。请参阅 bug report 和 commit。我将尝试从源代码编译 5.1,看看我是否可以让它工作。 @andrewrjones 您可以回答并接受您自己的问题。 @MottiStrom 从来没有找到答案,而是转而使用其他东西。 【参考方案1】:

这适用于我在 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
    

【讨论】:

谢谢马库斯!差不多就是这样。在 Mac 上,我只需将 visible: true 添加到 Window 并将 radius: 10 添加到 Rectangle,我就得到了我想要的。将此作为示例项目上传到 GitHub:github.com/andrewrjones/qt-transparent-main-window 非常好,很高兴它成功了。 :) 感谢您在您的回购中提到我。【参考方案2】:

对于任何像我一样迟到的人。对于 C++ 和 Python,至少您必须指定小部件属性 WA_TranslucentBackground 才能使背景透明。

【讨论】:

【参考方案3】:

您必须使用viewer.setMask() 来告诉显示 qml 的 qt 小部件在哪里绘制以及在哪里不绘制......

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

这不适用于 Qt 5.0。您会得到黑色背景,而不是透明背景。

以上是关于Qt5 & QtQuick2 - 透明主窗口的主要内容,如果未能解决你的问题,请参考以下文章

QtQuick2快捷方式未触发

我在哪里可以找到最新版本的 QtQuick2 库?

Qt 5.1rc1 在 mac OS X 上部署,我如何部署一个简单的 QtQuick2 应用程序?

Qt5.5 为啥不显示错误信息?

如何运行导入 QtQuick2.0 和 QtQuick.Controls 1.1 的应用程序

基于QtQuick2.0应用程序运行于XP系统的诸多问题