Как изменить размер текстуры, чтобы она занимала только часть пользовательского интерфейса 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 пользовательский интерфейс.

Как уменьшить нижнее поле текстуры, чтобы оно соответствовало 80 % высоты MyQQuickItem. Я хочу рендерить текстуру для части MyQQuickItem, а остальные оставить пустыми или черными? Возможно ли это в пределах updatePaintNode.

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


person TheWaterProgrammer    schedule 04.09.2017    source источник
comment
нашел решение того, что я пытаюсь сделать, опубликовал и ответил. Другие ответы, которые могут дать больше информации о том, как работает этот QSGSimpleTextureNode, приветствуются.   -  person TheWaterProgrammer    schedule 05.09.2017


Ответы (1)


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

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

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

person TheWaterProgrammer    schedule 05.09.2017