QML:矩形的透明度不起作用

时间:2011-10-19 12:02:18

标签: qml qt-quick qt4.7

如何设置矩形/屏幕的透明度。

我有以下代码:

// 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(在视频位置设置透明度)时,它应该在视频位置显示视频,在上面的示例中它显示背景为白色,因为它应该在视频平面上显示视频。

3 个答案:

答案 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( “边界:无”);