我已按以下方式覆盖updatePaintNode
,以便在QQuickItem
派生的类MyQQuickItem
上绘制一个OpenGL纹理。
QSGNode *MyQQuickItem::updatePaintNode(QSGNode * oldNode, QQuickItem::UpdatePaintNodeData * /*updatePaintNodeData*/)
{
QSGSimpleTextureNode * textureNode = static_cast<QSGSimpleTextureNode *>(oldNode);
if (!textureNode) {
textureNode = new QSGSimpleTextureNode();
}
QSize size(800, 800);
// myTextureId is a GLuint here
textureNode.reset(window()->createTextureFromId(myTextureId, size));
textureNode->setTexture(my_texture);
textureNode->markDirty(QSGBasicGeometryNode::DirtyMaterial);
QSizeF myiewport = boundingRect().size();
qreal xOffset = 0;
qreal yOffset = 10;
textureNode->setRect(xOffset, yOffset, myViewport.width(), myViewport.height());
return textureNode;
}
这样可以很好地呈现纹理内容,但覆盖了整个MyQQuickItem
UI。
如何减少纹理的下边距,使其适合MyQQuickItem
的80%高度。
我想将纹理渲染到 MyQQuickItem
&amp;的一部分。剩下的是空白还是黑色?这可能在updatePaintNode
内。
注意这里的纹理大小不是UI窗口大小。我的纹理大小 800乘800 。 UI窗口大小不同,取决于屏幕。
答案 0 :(得分:0)
我找到了答案:
更改myViewport.height()
会在希望设置的 Y 方向中提供所需的结尾。同样,更改myViewport.width()
会在希望设置的 X 方向上给出所需的结尾。
TextureNode&#39; s setRect
中的4个参数可以拉伸&amp;在QQuickItem的一部分中按照自己的方式拟合纹理。