我在QDialog中添加了一个QQuickWidget来加载.qml,但是它的背景色是白色的。我的qml声明了一个Rectangle,它没有填充所有的QQuickWidget曲面。我需要没有填充的表面有相同的背景颜色的对话框。背景透明的方法是什么?
发布于 2017-07-07 20:31:14
它在QQuickWidget文档中得到了解释: Limitations
将其他小部件放在下面并使QQuickWidget透明不会带来预期的结果:下面的小部件是不可见的。这是因为在实践中,QQuickWidget是在所有其他常规的、非OpenGL的小部件之前绘制的,所以看清楚类型的解决方案是不可行的。其他类型的布局,如在QQuickWidget上安装小部件,将如预期的那样工作。 当绝对必要时,可以通过在QQuickWidget上设置Qt::WA_AlwaysStackOnTop属性来克服这个限制。但是要注意,这破坏了堆叠顺序。例如,在QQuickWidget上不可能有其他小部件,所以它应该只在需要半透明的QQuickWidget和下面可见的其他小部件的情况下使用。
发布于 2020-12-01 00:16:32
浮云:
auto quickWidget = new QQuickWidget();
quickWidget->setWindowFlags(Qt::SplashScreen);
quickWidget->setAttribute(Qt::WA_AlwaysStackOnTop);
quickWidget->setAttribute(Qt::WA_TranslucentBackground);
quickWidget->setClearColor(Qt::transparent);
quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
quickWidget->setSource(QUrl("qrc:/cloud.qml"));
quickWidget->show();cloud.qml
import QtQuick 2.0
Item {
id: root
width: 400
height: 300
Canvas {
id: cloud
anchors.fill: parent
onPaint: {
var ctx = getContext("2d");
ctx.beginPath();
var x = 100;
var y = 170;
ctx.arc(x, y, 60, Math.PI * 0.5, Math.PI * 1.5);
ctx.arc(x + 70, y - 60, 70, Math.PI * 1, Math.PI * 1.85);
ctx.arc(x + 152, y - 45, 50, Math.PI * 1.37, Math.PI * 1.91);
ctx.arc(x + 200, y, 60, Math.PI * 1.5, Math.PI * 0.5);
ctx.moveTo(x + 200, y + 60);
ctx.lineTo(x, y + 60);
ctx.strokeStyle = "#797874";
ctx.stroke();
ctx.fillStyle = "#8ED6FF";
ctx.fill();
}
}
}发布于 2017-07-07 16:18:54
使用QQuickWidget::setClearColor(Qt::transparent)并通过setFormat调用设置alpha通道。
https://stackoverflow.com/questions/44975226
复制相似问题