qgraphicsscene中的内容添加内容但不影响原先的qgraphicsscene
时间: 2024-09-30 14:12:09 浏览: 29
在QGraphicsScene中,你可以通过`addItem()`函数来向场景中添加新的图形对象,如`QGraphicsRectItem`, `QGraphicsPixmapItem`, 或者自定义的`QObject`等。这个操作不会直接修改原有的QGraphicsScene内容,而是将新对象作为独立的元素加入到场景中。如果需要保持原场景不变,可以创建一个新的QGraphicsScene实例,然后分别对两个场景进行操作。
例如:
```cpp
// 原有的QGraphicsScene
QGraphicsScene* sceneOriginal = ...;
// 新的内容
QGraphicsRectItem newItem = new QGraphicsRectItem(...);
// 创建新的QGraphicsScene来容纳新增内容
QGraphicsScene* sceneNew = new QGraphicsScene();
// 将新内容添加到新场景
sceneNew.addItem(newItem);
// 如果你想展示这两个场景,可以用QGraphicsView分开显示它们
QGraphicsView viewOriginal.setScene(sceneOriginal);
QGraphicsView viewNew.setScene(sceneNew);
```
这样,即便添加了新的内容,原始的QGraphicsScene仍会保持不变。
相关问题
QWidget中添加QGraphicsScene,QGraphicsScene中添加QWidget,如何获得QGraphicsScene鼠标点击下的坐标 C++
可以通过在QGraphicsScene中重写mousePressEvent函数来获取鼠标点击事件的坐标。
具体实现步骤如下:
1. 在QGraphicsScene派生类中重写mousePressEvent函数。
2. 在mousePressEvent函数中,获取当前鼠标点击的坐标点,可以使用函数QGraphicsScene::mouseEvent()或QGraphicsSceneMouseEvent::scenePos()。
以下是示例代码:
```cpp
class MyScene : public QGraphicsScene {
public:
MyScene(QObject* parent = nullptr) : QGraphicsScene(parent) {}
protected:
void mousePressEvent(QGraphicsSceneMouseEvent* event) override {
QPointF clickPos = event->scenePos();
qDebug() << "Clicked position: " << clickPos;
}
};
```
在该示例代码中,当鼠标在MyScene中点击时,将在控制台输出鼠标点击的坐标点。
QWidget中添加QGraphicsScene,QGraphicsScene中添加QWidget,QWidget又嵌入QLabel,如何获得QGraphicsScene鼠标点击下的坐标
如果您想要在QGraphicsScene中获取鼠标事件的坐标,可以在QGraphicsScene上安装事件过滤器,并在事件过滤器中捕获鼠标事件。在事件过滤器中,可以使用QGraphicsScene的mapFromScene()函数将场景坐标转换为视图坐标,然后使用视图坐标转换为QWidget坐标,最后使用QWidget坐标转换为QLabel坐标。下面是一个示例代码:
``` python
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QGraphicsScene, QLabel, QWidget
class MyWidget(QWidget):
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent)
self.label = QLabel("Hello World", self)
self.label.move(10, 10)
self.scene = QGraphicsScene(self)
self.scene.addWidget(self.label)
self.scene.installEventFilter(self)
def eventFilter(self, obj, event):
if obj == self.scene and event.type() == Qt.MouseButtonPress:
mouse_pos = event.scenePos()
view_pos = self.scene.views()[0].mapFromScene(mouse_pos)
widget_pos = self.mapToGlobal(view_pos)
label_pos = self.label.mapFromGlobal(widget_pos)
print("Label position: {}".format(label_pos))
return super(MyWidget, self).eventFilter(obj, event)
```
在上面的代码中,我们在QWidget中创建了一个QLabel,并将其添加到QGraphicsScene中。然后,我们安装了一个事件过滤器来捕获场景中的鼠标事件,并在事件过滤器中获取了鼠标坐标。最后,我们使用QWidget和QLabel的坐标转换函数来计算标签的坐标。
阅读全文