我在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透明部分变成黑色而不是透明
答案 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
}
}
产生这个结果:
图像取自here,使用GIMP调整为200x200。 项目结构如下:
答案 1 :(得分:0)
我使用RGB32而不是ARGB32格式创建QImage。