Я обнаружил, что geometry->setLineWidth(3);
в приведенном ниже коде распространяется на другие элементы QML и может их искажать, даже если эти другие элементы QML являются «нормальными» элементами QML (без подкласса QQuickItem
под ними). Мне кажется странным, что вы можете повлиять на другие элементы, и мне интересно, является ли это ошибкой? В документации сказано, что эта функция должна влиять только на текущий элемент, но это не мой опыт. Может ли кто-нибудь взвесить, почему у geometry->setLineWidth(3);
такая громоздкая мощь?
QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data){
QSGGeometry *geometry =
new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 2);
geometry->setDrawingMode(GL_LINES);
geometry->setLineWidth(3);
geometry->vertexDataAsPoint2D()[0].set(0, 0);
geometry->vertexDataAsPoint2D()[1].set(width(), height());
QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
material->setColor(QColor(255, 0, 0));
QSGGeometryNode *node = new QSGGeometryNode;
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
delete oldNode;
return node;
}
Если я опущу строку geometry->setLineWidth(3);
, проблема исчезнет.