如何设置矩形/屏幕的透明度。
我有以下代码:
// main.cpp
void main(int argc, char*[] argv)
{
QApplication::setGraphicsSystem("raster");
QApplication app(argc, argv);
QDeclerativeView view;
view.setSource(QUrl::fromLocalFile("loaderTest.qml"));
view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
view.showFullScreen();
//QRegion mask(10, 10, 100, 100);
//view.setMask();
view.show();
app.exec();
}
QML文件是:
//loaderTest.qml
Rectangle
{
id: mainRectangle
width: 1000
height: 700
color: "transparent"
//color: "#00000000"
Image
{
id: image1;
width: 348;
height: 155;
anchors.horizontalCenter: parent.horizontalCenter;
anchors.verticalCenter: parent.verticalCenter;
source: "test.png"
}
Loader
{
id: mainLoader
anchors.fill: parent;
source: "";
focus: true;
}
}
我在这个屏幕上有一个加载器和一个图像,背景颜色是透明的。 当我运行这个应用程序时,它应该显示透明背景,图像在中心(因为我没有设置加载器源)。
但我得到的是中心的图像,屏幕上填充了白色背景,我不知道是谁填充了这种白色背景颜色,因为我已经提到透明色作为背景。
我使用的是QT.4.7.0和Linux。
我的目标系统上有两个飞机,一个是视频平面,另一个是图形平面,当我运行带有透明背景的GUI(在视频位置设置透明度)时,它应该在视频位置显示视频,在上面的示例中它显示背景为白色,因为它应该在视频平面上显示视频。
答案 0 :(得分:3)
默认情况下,QDeclarativeView会绘制背景。也许这就是你的问题。
来自http://doc.qt.nokia.com/4.7/qdeclarativeperformance.html
如果您将使用QML提供应用程序的背景,也可以阻止QDeclarativeView绘制其窗口背景,例如
QDeclarativeView window;
window.setAttribute(Qt::WA_OpaquePaintEvent);
window.setAttribute(Qt::WA_NoSystemBackground);
window.viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
window.viewport()->setAttribute(Qt::WA_NoSystemBackground);
答案 1 :(得分:0)
我的第一个猜测是背景是白色的,你的矩形确实是完全透明的。
LoaderScreen的类型是什么,我猜它是某种QDecalarativeView,请原谅任何技术上的遗漏都没有编写Qt / QML近一年了。我记得它的视图的默认背景是白色的,你希望得到什么样的透明度呢?
答案 2 :(得分:0)
如果只在QPushButton上设置背景颜色,除非将border属性设置为某个值,否则背景可能不会出现。这是因为,默认情况下,QPushButton绘制一个与背景颜色完全重叠的原生边框。 这可能会在QPushButton周围显示一个黑色矩形框。您将面临此问题,尤其是在Linux计算机上。为了避免这种情况,您可以将border属性设置为none
小窗口> setStyleSheet( “边界:无”);