วิธีปรับขนาดพื้นผิวให้ครอบครองเพียงส่วนหนึ่งของ QQuickItem UI

ฉันได้แทนที่ 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 จะแตกต่างกันและขึ้นอยู่กับหน้าจอ


person TheWaterProgrammer    schedule 04.09.2017    source แหล่งที่มา
comment
พบวิธีแก้ปัญหาสำหรับสิ่งที่ฉันพยายามทำ & โพสต์ & ตอบ ยินดีต้อนรับคำตอบอื่นๆ ที่สามารถให้ข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการทำงานของ QSGSimpleTextureNode นี้   -  person TheWaterProgrammer    schedule 05.09.2017


คำตอบ (1)


ฉันพบคำตอบสำหรับสิ่งนี้:

การเปลี่ยน myViewport.height() ทำให้ต้องลงท้ายในทิศทาง Y ที่ต้องการตั้งค่า ในทำนองเดียวกัน การเปลี่ยน myViewport.width() จะทำให้ต้องลงท้ายในทิศทาง X ที่ต้องการตั้งค่า

พารามิเตอร์ 4 ตัวใน setRect ของ TextureNode สามารถยืดและปรับให้พอดีกับพื้นผิวตามที่เราต้องการภายในส่วนหนึ่งของ QQuickItem

person TheWaterProgrammer    schedule 05.09.2017