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 - 透明主窗口的主要内容,如果未能解决你的问题,请参考以下文章
Qt 5.1rc1 在 mac OS X 上部署,我如何部署一个简单的 QtQuick2 应用程序?