【问题标题】:QML:Transparency for an rectangle is not workingQML:矩形的透明度不起作用
【发布时间】:2011-10-19 12:02:17
【问题描述】:

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

我有以下代码:

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

【问题讨论】:

    标签: qml qt-quick qt4.7


    【解决方案1】:

    默认情况下,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);
    

    【讨论】:

      【解决方案2】:

      我的第一个猜测是背景是白色的,而你的矩形确实是完全透明的。

      LoaderScreen 是什么类型,我猜它是某种 QDecalarativeView,请原谅任何技术失误已经快一年没有编写 Qt/QML 了。我记得视图的默认背景是白色的,你希望达到什么样的透明度?

      【讨论】:

      • 是的 LoaderScreen 是从 QDecalarativeView 派生的,我需要完全透明。 -- 克巴拉
      【解决方案3】:

      如果您只在 QPushButton 上设置背景颜色,则背景可能不会出现,除非您将边框属性设置为某个值。这是因为,默认情况下,QPushButton 绘制一个与背景颜色完全重叠的原生边框。 这可能会在 QPushButton 周围显示一个黑色矩形框。您将面临这个问题,尤其是在 Linux 机器上。为了避免这种情况,您可以将边框属性设置为无

      widget->setStyleSheet("border:none");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        • 1970-01-01
        • 2016-04-26
        • 1970-01-01
        • 2022-01-22
        • 2012-03-01
        • 1970-01-01
        相关资源
        最近更新 更多