ฉันได้แทนที่ updatePaintNode
ด้วยวิธีต่อไปนี้เพื่อวาดพื้นผิว OpenGL บนคลาสที่ได้รับ QQuickItem
ที่เรียกว่า MyQQuickItem
ที่นี่
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 ทั้งหมดของฉัน
จะลดระยะขอบด้านล่างของพื้นผิวได้อย่างไรเพื่อให้พอดี 80% ของความสูง ของ MyQQuickItem
ฉันต้องการแสดงพื้นผิวเป็นส่วนหนึ่งของ MyQQuickItem
และปล่อยให้ส่วนที่เหลือว่างหรือเป็นสีดำ เป็นไปได้ภายใน updatePaintNode
โปรดทราบว่า ขนาดพื้นผิวไม่ใช่ขนาดหน้าต่าง UI ที่นี่ ขนาดพื้นผิวของฉันคือ 800 x 800 ในขณะที่ขนาดหน้าต่าง UI จะแตกต่างกันและขึ้นอยู่กับหน้าจอ
QSGSimpleTextureNode
นี้ - person TheWaterProgrammer   schedule 05.09.2017