QSGTexture上的透明QImage

时间:2017-05-25 12:58:39

标签: qt qml

我在Windows上使用Qt5.8。我创建了一个QQucikItem,我在QML上渲染。在 updatePaintNode 函数中,我创建一个QImage(有一些透明部分)为 finalImage

QSGSimpleTextureNode *node = 0;
QSGTexture *texture;        
node = static_cast<QSGSimpleTextureNode *>(oldNode);
if (!node) {
    node = new QSGSimpleTextureNode();
}

texture = window()->createTextureFromImage(finalImage);
node->setTexture(texture);
node->setRect(boundingRect());
node->markDirty(QSGNode::DirtyForceUpdate);
return node;

所以在qml透明部分变成黑色而不是透明

2 个答案:

答案 0 :(得分:2)

我不知道你在做什么,但黑色背景意味着图像没有被加载。通常它是错误的路径或类似的东西。或者可能是图像已损坏。您只能有意填写背景,默认情况下它是透明的。

例如这段代码:

<强> C ++:

TestItem::TestItem(QQuickItem *parent)
    :QQuickItem(parent)
{
    setFlag(QQuickItem::ItemHasContents);
}

QSGNode *TestItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *updatePaintNodeData)
{
    QSGSimpleTextureNode *node = static_cast<QSGSimpleTextureNode *>(oldNode);
    if (!node) {
        node = new QSGSimpleTextureNode();
        QImage img(":/sunflower.png");
        QSGTexture *texture = window()->createTextureFromImage(img);
        node->setTexture(texture);
    }
    node->setRect(boundingRect());
    return node;
}

<强> QML

import QtQuick 2.7
import QtQuick.Window 2.0
import qml.test 1.0
import QtGraphicalEffects 1.0

Window {
    id: mainWindow
    width: 600
    height: 400
    visible: true

    LinearGradient {
        anchors.fill: parent
        start: Qt.point(0, 0)
        end: Qt.point(0, 200)
        gradient: Gradient {
            GradientStop { position: 0.0; color: "lightblue" }
            GradientStop { position: 1.0; color: "white" }
        }
    }

    TestItem {
        width: 200
        height: 200
        anchors.centerIn: parent
    }
}

产生这个结果:

enter image description here

图像取自here,使用GIMP调整为200x200。 项目结构如下:

enter image description here

答案 1 :(得分:0)

我使用RGB32而不是ARGB32格式创建QImage。