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