qt c++重写继承QGraphicsView批量传入点集显示在图上并且可以和图像一起进行缩放,选中其中一个点可以改变颜色
时间: 2023-05-16 08:07:31 浏览: 51
可以通过重写 QGraphicsView 的 paintEvent 函数,在其中使用 QPainter 绘制点集。同时,可以通过重写 QGraphicsView 的 mousePressEvent 和 mouseReleaseEvent 函数,实现选中点并改变颜色的功能。缩放功能可以通过 QGraphicsView 的 setTransform 函数实现。以下是示例代码:
```
class MyGraphicsView : public QGraphicsView {
public:
MyGraphicsView(QWidget *parent = nullptr) : QGraphicsView(parent) {}
void setPoints(const QVector<QPointF> &points) {
m_points = points;
update();
}
protected:
void paintEvent(QPaintEvent *event) override {
QGraphicsView::paintEvent(event);
QPainter painter(viewport());
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(Qt::black, 2));
painter.drawPoints(m_points);
}
void mousePressEvent(QMouseEvent *event) override {
QGraphicsView::mousePressEvent(event);
QPointF pos = mapToScene(event->pos());
for (int i = 0; i < m_points.size(); ++i) {
if (QRectF(m_points[i] - QPointF(5, 5), QSizeF(10, 10)).contains(pos)) {
m_selectedIndex = i;
m_points[i] = Qt::red;
update();
break;
}
}
}
void mouseReleaseEvent(QMouseEvent *event) override {
QGraphicsView::mouseReleaseEvent(event);
m_selectedIndex = -1;
update();
}
private:
QVector<QPointF> m_points;
int m_selectedIndex = -1;
};
```
使用时,可以这样调用:
```
QVector<QPointF> points = { QPointF(0, 0), QPointF(100, 100), QPointF(200, 200) };
MyGraphicsView *view = new MyGraphicsView;
view->setScene(new QGraphicsScene);
view->setPoints(points);
view->show();
```
其中,points 是要显示的点集,view 是 MyGraphicsView 的实例。