如何在具有透明背景的无框对话框中显示从QQuickView创建的QWidget

时间:2014-04-26 19:22:39

标签: qt transparency qml

我使用QWidget中的QWidget::createWindowContainer创建了QQuickView

QQuickView view;
view.setSource(QUrl("./Test.qml"));

QWidget *container = QWidget::createWindowContainer(&view);

Qml非常简单:

import QtQuick 2.0
Rectangle {
    width: 50
    height: 50
    color: "blue"
    radius: 5
}

我需要一个半透明的无框架容器来显示矩形。试图在QDialog中显示小部件:

QDialog dialog;
QHBoxLayout layout;

dialog.setWindowFlags(Qt::FramelessWindowHint);
dialog.setAttribute(Qt::WA_TranslucentBackground);
layout.addWidget(container);
dialog.setLayout(&layout);
dialog.show();

我什么也没得到,因为似乎透明度也传播到了container个对象。如果我尝试添加到layout而不是container窗口小部件,例如QPushButton,则一切正常,只显示按钮。我的QML小部件需要相同的结果。哪里可能是问题?我正在使用Qt 5.2.1

1 个答案:

答案 0 :(得分:1)

我怀疑它可以用于嵌入QWidget的QQuickView。但是你可以拥有一个透明的QQuickView:

QQuickView view;

view.setSurfaceType(QSurface::OpenGLSurface);

QSurfaceFormat format;
format.setAlphaBufferSize(8);
format.setRenderableType(QSurfaceFormat::OpenGL);

view.setFormat(format);
view.setColor(QColor(Qt::transparent));
view.setClearBeforeRendering(true);

view.setFlags(Qt::FramelessWindowHint);

view.setSource(QStringLiteral("./Test.qml"));

view.show();