程序运行截图如下:

这里面有一个坑,就是获取场景中的元素并不是根据图像中,从左往右,从上往下这样的获取。

而是根据加入常见的先后,进行的,

如下图:

Line是在Ellipse前加载的,所以是这样的结构进行展示的。

官方并没有很详细的说明

但根据Qt::ItemSelectionMode这个参数可以知道

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
class QGraphicsScene;
class QGraphicsLineItem;
class QGraphicsEllipseItem;
class QGraphicsItem;namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();void btnClicked();void connectDot(const QGraphicsLineItem *startLine, const QGraphicsLineItem *endLine, QList<QGraphicsItem *> &dotVec);private:Ui::Widget *ui;QGraphicsScene *m_scene;
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

main.cpp

#include "widget.h"
#include "ui_widget.h"#include <QGraphicsScene>
#include <QGraphicsLineItem>
#include <QGraphicsEllipseItem>
#include <QGraphicsItem>
#include <QDebug>
#include <QList>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);m_scene=new QGraphicsScene;m_scene->setSceneRect(0,0,this->width(),this->height());QGraphicsLineItem *lineItemStart=new QGraphicsLineItem;lineItemStart->setLine(0,0,700,0);lineItemStart->setPen(QPen(Qt::black,5));m_scene->addItem(lineItemStart);QGraphicsLineItem *lineItemEnd=new QGraphicsLineItem;lineItemEnd->setLine(0,480,700,480);lineItemEnd->setPen(QPen(Qt::black,5));m_scene->addItem(lineItemEnd);for(int i=0;i<10;i++){QGraphicsEllipseItem *ellipse=new QGraphicsEllipseItem;ellipse->setRect(100,(i+1)*40,16,16);m_scene->addItem(ellipse);}for(int i=0;i<10;i++){QGraphicsEllipseItem *ellipse=new QGraphicsEllipseItem;ellipse->setRect(300,(i+1)*45,16,16);m_scene->addItem(ellipse);}ui->graphicsView->setScene(m_scene);connect(ui->pushButton,&QPushButton::clicked,this,&Widget::btnClicked);
}Widget::~Widget()
{delete ui;
}void Widget::btnClicked()
{//第一竖排的点QList<QGraphicsItem*> graphicsSet=m_scene->items(0,0,150,500,Qt::IntersectsItemBoundingRect,Qt::AscendingOrder);//这个东西会后来居上QGraphicsLineItem *startLine=(QGraphicsLineItem*)graphicsSet[0];QGraphicsLineItem *endLine=(QGraphicsLineItem*)graphicsSet[1];graphicsSet.removeAt(0);graphicsSet.removeAt(0);connectDot(startLine,endLine,graphicsSet);//第二竖排的点graphicsSet.clear();graphicsSet=m_scene->items(150,0,400,500,Qt::IntersectsItemBoundingRect,Qt::AscendingOrder);startLine=(QGraphicsLineItem*)graphicsSet[0];endLine=(QGraphicsLineItem*)graphicsSet[1];graphicsSet.removeAt(0);graphicsSet.removeAt(0);connectDot(startLine,endLine,graphicsSet);
}void Widget::connectDot(const QGraphicsLineItem *startLine, const QGraphicsLineItem *endLine, QList<QGraphicsItem*> &dotVec)
{//两条线和圆点的QGraphicsLineItem *itemStart=new QGraphicsLineItem;itemStart->setLine(((QGraphicsEllipseItem*)dotVec[0])->rect().x()+8,startLine->line().y1(),((QGraphicsEllipseItem*)dotVec[0])->rect().x()+8,((QGraphicsEllipseItem*)dotVec[0])->rect().y());m_scene->addItem(itemStart);QGraphicsLineItem *itemEnd=new QGraphicsLineItem;itemEnd->setLine(((QGraphicsEllipseItem*)dotVec[dotVec.size()-1])->rect().x()+8,endLine->line().y1(),((QGraphicsEllipseItem*)dotVec[dotVec.size()-1])->rect().x()+8,((QGraphicsEllipseItem*)dotVec[dotVec.size()-1])->rect().y()+16);m_scene->addItem(itemEnd);//画点和点的连线for(int i=1;i<dotVec.size();i++){    //3个点里面只要画2条线,10个点9条线int posXStart=static_cast<QGraphicsEllipseItem*>(dotVec[i-1])->rect().x();int posYStart=static_cast<QGraphicsEllipseItem*>(dotVec[i-1])->rect().y();int posXEnd=static_cast<QGraphicsEllipseItem*>(dotVec[i])->rect().x();int posYEnd=static_cast<QGraphicsEllipseItem*>(dotVec[i])->rect().y();QGraphicsLineItem *item=new QGraphicsLineItem;item->setLine(posXStart+8,posYStart+16,posXEnd+8,posYEnd);m_scene->addItem(item);}
}

Qt工作笔记-QGraphics框架中,给图像中的点连线【获取场景中的数据】【有坑】相关推荐

  1. Qt工作笔记-QGraphics框架场景中图元的移除与析构

    1.场景里面使用removeItem函数,这个函数官方给出如下解释 注意这个词remove只是移除,并不是delete掉,所以只是场景中(显示出来的图元)没有了,空间还是存在. 举个代码例子: voi ...

  2. Qt工作笔记-QGraphics重设场景坐标【标签:Qt图形框架】

    Qt图形框架里面场景的坐标是以最中间为0,0点 作为新一辈的程序员,我是感觉到很新颖,但为了兼容其他的程序(图形要生成坐标,给其他程序读),要重设坐标点,把他搞为最左上为0,0点. 当没重设坐标点时, ...

  3. Qt工作笔记-QGraphicsView框架容易忽视的坐标问题-“画布”QgraphicsScene到底放在了哪儿?

    转载地址: https://blog.csdn.net/tianyuan521521/article/details/46290525 前言 最近一直使用QGraphicsView框架在我的一个实际项 ...

  4. Qt工作笔记-html做界面时,QFileInfo小技巧,获取前端页面

    目录 背景 演示及代码 总结 背景 有的时候要调用三方的库,能够比较简单的实现一些酷炫的效果.这里特别是前端的酷炫效果! 如果在Qt中,某个地方,能小范围使用前端Qt的效果,辣么,将会是一个多么有意思 ...

  5. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  6. Qt工作笔记-信号与槽参数匹配问题

    今天,我把Qt3代码转化为Qt5,控件啥的都要换,李主任说了下为什么以前的信号和槽函数参数不匹配!!这句话让我对Qt中的信号与槽进一步有了了解. 下面的这个演示源码是基于这个博客的 https://b ...

  7. Qt工作笔记-关于各种QGraphics中item的坐标分析(如QGraphicsLineItem)【天坑】

    程序运行截图如下: 只是随便看看,大家不要当一回事, 下面是源码: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> ...

  8. Qt工作笔记-ListWidget拖动(拖拽)到QGraphicsScene【补坑】【Qt视图框架补坑】

    关于以前的这篇博文,进行补坑 https://blog.csdn.net/qq78442761/article/details/80957186 坑的位置在这,采用上面这篇博文的配法,无法得到图元在场 ...

  9. Qt工作笔记-右键删除视图中的Item【坐标映射】

    程序运行截图如下: 关键: 当处理场景中的图形项时,将坐标或者一个任意的形状从场景映射到图形项.或者从一个图形项映射到另一个图形项.或者从视图映射到场景,这些坐标变换都是很常用的.例如,在QGraph ...

最新文章

  1. threeJS 中数学相关内容
  2. java二次开发浏览器内核_常见的五大浏览器的内核
  3. SQL游标原理和使用方法
  4. 给地球上的22.8万种植物建立图像索引
  5. tips:Java基本数据类型大小比较
  6. 中国队新主帅朱广沪印象
  7. c语言中用递归求平方根,下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下: 例如 - 赏学吧...
  8. Springboot集成SpringData JPA
  9. 自然语言5——初学者书籍
  10. 4.企业应用架构模式 --- Web表现层
  11. 软考程序员-C专题(1)
  12. 设计模式(一) 六大原则
  13. BZOJ4134 : ljw和lzr的hack比赛
  14. WOL网络唤醒远程开机的关键步骤,魔术唤醒一步都不能少!
  15. 北京大学可视化发展前沿暑期学校第四讲
  16. HtmlUnit使用体会
  17. win10启动0xc0000001错误
  18. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION security.to_date does not exist
  19. X-ray重金属检测仪工程文件的自动格式转换
  20. Zbrush基础《二》

热门文章

  1. 听说IT人的目标都是成为架构师,那么请收下这份架构养成计划
  2. 飞秋教程:日程安排记事提醒
  3. 有三角形的即时通讯源码?
  4. 【转载】飞鸽传书2013【绿色版】
  5. 第一句就是定义了一种ptrfun的C++类型
  6. 飞秋的模拟实现代码,很好很山寨!
  7. 【秘诀】我进公司到现在都尽量避免遇上和同事撞单
  8. 2020年7大技术趋势
  9. linux mysql 共享存储空间_Linux UDEV和为MySQL InnoDB共享表空间配置裸设备
  10. android studio gradle home,Android Studio3.0 Gradle 4.1配置