Qt Graphicscene:如何创建新层?
我有一个Qt Graphicscene:如何创建新层?,qt,graphics,Qt,Graphics,我有一个QGraphicsView,显示qgraphicscene。用户可以使用按钮缩放和平移场景。此操作通过QGraphicsView功能实现,如scale()。 现在,我想在它上面画一些透明的像素贴图,它们不会被用户操作转换。如何将它们与图形视图分开放置?您可以将该标志添加到不希望缩放的pixmap项目中 该项忽略继承的转换(即,其位置为 仍定位到其父对象,但父对象或视图旋转、缩放或 剪切变换将被忽略)。这面旗子有助于保持 文本标签项水平且未缩放,因此它们仍将保持不变 如果视图已转换,则可读
QGraphicsView
,显示qgraphicscene
。用户可以使用按钮缩放和平移场景。此操作通过QGraphicsView
功能实现,如scale()
。
现在,我想在它上面画一些透明的像素贴图,它们不会被用户操作转换。如何将它们与图形视图分开放置?您可以将该标志添加到不希望缩放的pixmap项目中
该项忽略继承的转换(即,其位置为
仍定位到其父对象,但父对象或视图旋转、缩放或
剪切变换将被忽略)。这面旗子有助于保持
文本标签项水平且未缩放,因此它们仍将保持不变
如果视图已转换,则可读。设置后,将显示项目的视图
几何体和场景几何体将分别维护。你必须
调用deviceTransform()映射坐标并检测
看法默认情况下,此标志处于禁用状态。这面旗子是在年引进的
Qt 4.3。注意:设置此标志后,您仍然可以缩放项目本身,
这种尺度变换会影响项目的子项
使用以下功能执行此操作:
pixmapItem->setFlag(QGraphicsItem::ItemIgnoresTransformations);
如果希望在完全独立于场景变换的QGraphicsView
上绘制某些内容,可以将QGraphicsView
子类化,并将这些项目作为(覆盖的)paintEvent
方法的一部分进行绘制
void MyView::paintEvent(QPaintEvent *event) {
// Call the base paintEvent to do the "normal" stuff.
QGraphicsView::paintEvent(event);
// Paint your other stuff. Note that you have to create the QPainter on
// the viewport.
QPainter painter(viewport());
painter.setBrush(QBrush(Qt::black));
// ... etc.
}
我喜欢戴夫的回答;对于一个简单的HUD,这将是一个好方法。但是,您可以在不进行子类化和手动绘制的情况下执行类似的操作:只需创建两个场景和两个视图,并将它们放在彼此的顶部,例如放在QGridLayout的同一位置。因此,您有两个完全独立的“层”,正如您所希望的。此标志不阻止GraphicsView从项目中向外看,例如,EnsureRevisible()。此标志仅在视图缩放时影响项目。没有用于处理场景平移的标志。如果希望对象始终在同一位置可见(此标志除外),则应在每次场景重新绘制时显式调用这些项目的setPos。不幸的是,在滚动视图时它不起作用。它仅适用于使整个视图无效的变换。