Как изменить размер текстуры, чтобы она занимала только часть пользовательского интерфейса QQuickItem

Я переопределил 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,

Обратите внимание, что размер текстуры здесь не является размером окна пользовательского интерфейса. Мой размер текстуры 800 на 800. В то время как размер окна пользовательского интерфейса отличается и зависит от экрана.

1 ответ

Я нашел ответ на это:

изменения myViewport.height() дает требуемый конец в направлении Y, который желает установить. Точно так же, изменяя myViewport.width() дает требуемый конец в направлении X, который желает установить.

4 параметра в текстурном узле setRect можно растягивать и подгонять текстуру так, как вы хотите в пределах части QQuickItem.

Другие вопросы по тегам