【问题标题】:Qt5 & QtQuick2 - transparent main windowQt5 & QtQuick2 - 透明主窗口
【发布时间】: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 reportcommit。我将尝试从源代码编译 5.1,看看我是否可以让它工作。
  • @andrewrjones 您可以回答并接受您自己的问题。
  • @MottiStrom 从来没有找到答案,而是转而使用其他东西。

标签: qt qml qt5 qtquick2


【解决方案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。您会得到黑色背景,而不是透明背景。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      相关资源
      最近更新 更多