qt c++重写继承QGraphicsView批量传入点集显示在图上并且可以和图像一起进行缩放,选中其中一个点可以改变颜色
时间: 2023-08-31 11:23:21 浏览: 288
Qt 基于QGraphicsView的显示控件,支持放大、缩小、鼠标拖动
### 回答1:
可以通过以下代码实现:
```cpp
class MyGraphicsView : public QGraphicsView
{
public:
MyGraphicsView(QWidget *parent = nullptr) : QGraphicsView(parent) {}
void showPoints(const QVector<QPointF>& points)
{
QGraphicsScene* scene = new QGraphicsScene(this);
for (const QPointF& point : points)
{
QGraphicsEllipseItem* item = new QGraphicsEllipseItem(point.x() - 2, point.y() - 2, 4, 4);
item->setBrush(Qt::blue);
scene->addItem(item);
}
setScene(scene);
}
protected:
void wheelEvent(QWheelEvent* event) override
{
if (event->modifiers() & Qt::ControlModifier)
{
double scaleFactor = 1.15;
if (event->delta() > 0)
scale(scaleFactor, scaleFactor);
else
scale(1 / scaleFactor, 1 / scaleFactor);
event->accept();
}
else
{
QGraphicsView::wheelEvent(event);
}
}
void mousePressEvent(QMouseEvent* event) override
{
QGraphicsView::mousePressEvent(event);
if (event->button() == Qt::LeftButton)
{
QPointF pos = mapToScene(event->pos());
QGraphicsItem* item = scene()->itemAt(pos, QTransform());
if (item)
{
item->setBrush(Qt::red);
}
}
}
};
```
使用方法:
```cpp
QVector<QPointF> points;
points << QPointF(0, 0) << QPointF(100, 100) << QPointF(200, 50);
MyGraphicsView* view = new MyGraphicsView;
view->showPoints(points);
view->show();
```
这样就可以在图上显示传入的点集,并且可以和图像一起进行缩放。选中其中一个点可以改变颜色。
### 回答2:
在重写继承QGraphicsView类时,您可以根据需要添加代码来实现将点集批量显示在图上并且可以与图像一起进行缩放的功能。首先,您可以通过重载QGraphicsView的构造函数,接收点集作为参数并存储在成员变量中。然后,您可以重写QGraphicsView的paintEvent()函数,在函数中使用QPainter来绘制点集。
绘制点集的方法可以是使用画笔和画刷,根据点的坐标遍历点集,使用QPainter绘制每个点。可以通过设置笔色和填充色来控制点的颜色。另外,可以添加成员变量来存储选中的点,通过重写鼠标点击事件来实现选中点的功能。当鼠标点击图中的点时,可以根据点击事件的坐标判断选中的点,并将其记下。然后,可以通过更改画笔或画刷的颜色来改变选中点的颜色。
至于缩放功能,您可以使用QGraphicsView提供的缩放方法来实现。可以通过重写鼠标滚轮事件来实现缩放图像的功能。在鼠标滚轮事件中,可以根据滚轮滚动的方向来调用QGraphicsView的缩放方法。可以设置缩放参数,例如缩放因子、中心点等。
综上所述,通过重写继承QGraphicsView类,并根据上述方式实现批量传入点集显示在图上、颜色修改和图像缩放的功能,您可以实现这个需求。希望这能对您有所帮助!
### 回答3:
在Qt中,可以通过重写继承自QGraphicsView的类来实现批量传入点集并显示在图上,并且允许和图像一起进行缩放的功能。以下是实现的步骤:
1. 创建一个自定义的QGraphicsView的子类,命名为MyGraphicsView。
2. 在MyGraphicsView类的构造函数中,初始化QGraphicsScene,并将其设置为视图的场景。
3. 在MyGraphicsView类中添加一个名为drawPoints的函数,用于绘制点的显示。
4. 在drawPoints函数中,使用QGraphicsScene的addEllipse函数绘制所有的点。
5. 在MyGraphicsView类中添加一个名为zoomIn的函数,用于放大图像。
6. 在zoomIn函数中,使用setScale函数来放大场景。
7. 在MyGraphicsView类中添加一个名为zoomOut的函数,用于缩小图像。
8. 在zoomOut函数中,使用setScale函数来缩小场景。
9. 在MyGraphicsView类中重新实现鼠标事件的函数,以便实现选中点改变颜色的功能。
10. 在鼠标点击事件的函数中,通过event函数获取点击的坐标,并使用items函数获取点击的所有图形项。
11. 遍历所有的图形项,判断是否是点,然后改变选中点的颜色。
通过以上的步骤,我们可以实现批量传入点集,显示在图上并且允许和图像一起进行缩放的MyGraphicsView类。在选择其中一个点时,可以通过改变其颜色来标识选中点。
阅读全文