我有一堆QGraphicsSvgItem的QGraphicsScene绘制由QGraphicsLineItem的连接。这个节目是一个树形结构图。如何用Qt中的非透明图形项控制裁剪?
我想要做的是提供一个功能,其中除了选定的子树以外的所有东西都变得透明。一种“突出这个子树”的功能。这部分很容易,但结果很难看,因为现在可以通过半透明的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)即使它们是半透明仍然会剪切这些行?
哦,任何想看完整源代码的人都可以去http://github.com/jjacobsson/calltree/tree/cts – JJacobsson 2009-10-30 07:49:22