У меня есть несколько QGraphicsSvgItem's в QGraphicsScene, которые нарисованы соединенными QGraphicsLineItem's. Это шоу представляет собой график древовидной структуры.
Что я хочу сделать, так это предоставить функцию, при которой все, кроме выбранного поддерева, становится прозрачным. Этакая функция «выделить это поддерево». Эта часть была легкой, но результаты уродливы, потому что теперь линии можно увидеть через полупрозрачные svg.
Я ищу способ по-прежнему закреплять другие объекты QGraphicsItem в сцене на элементах svg, давая эффект, что svg являются полупрозрачными окнами для фона.
Я знаю, что этот код не использует svg, но я полагаю, что вы можете заменить его самостоятельно, если вы так склонны.
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QGraphicsScene scene;
for( int i = 0; i < 10; ++i ) {
QGraphicsLineItem* line = new QGraphicsLineItem;
line->setLine( i * 25.0 + 1.0, 0, i * 25.0 + 23.0, 0 );
scene.addItem( line );
}
for( int i = 0; i < 11; ++i ) {
QGraphicsEllipseItem* ellipse = new QGraphicsEllipseItem;
ellipse->setRect( (i * 25.0) - 9.0, -9.0, 18.0, 18.0f );
ellipse->setBrush( QBrush( Qt::green, Qt::SolidPattern ) );
ellipse->setOpacity( 0.5 );
scene.addItem( ellipse );
}
QGraphicsView view( &scene );
view.show();
return app.exec();
}
Я бы хотел, чтобы линии не были видны за кругом. Я попытался поработать с буфером глубины и буфером трафарета, используя рендеринг opengl, но безрезультатно.
Как получить QGraphicsSvgItem (или QGraphicsEllipseItem в коде примера) для обрезания строк, даже если они полупрозрачны?