首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何根据coord x或coord y对QGraphicsitem的QList进行排序?

在Qt中,可以使用QGraphicsItemsetZValue()方法来控制QGraphicsItem的绘制顺序。setZValue()方法接受一个浮点数参数,用于指定QGraphicsItem的绘制顺序,数值越大的QGraphicsItem将会被绘制在数值较小的QGraphicsItem之上。

要根据coord xcoord yQGraphicsItemQList进行排序,可以使用std::sort()函数结合自定义的比较函数来实现。首先,将QList转换为std::vector,然后使用std::sort()函数对std::vector进行排序,最后再将排序后的结果转换回QList

下面是一个示例代码,假设有一个QList<QGraphicsItem*> itemsList需要根据coord x进行排序:

代码语言:txt
复制
#include <QGraphicsItem>
#include <algorithm>

bool compareByCoordX(QGraphicsItem* item1, QGraphicsItem* item2) {
    qreal x1 = item1->pos().x();
    qreal x2 = item2->pos().x();
    return x1 < x2;
}

// ...

// 将QList转换为std::vector
std::vector<QGraphicsItem*> itemsVector(itemsList.begin(), itemsList.end());

// 根据coord x进行排序
std::sort(itemsVector.begin(), itemsVector.end(), compareByCoordX);

// 将std::vector转换回QList
itemsList = QList<QGraphicsItem*>::fromVector(QVector<QGraphicsItem*>::fromStdVector(itemsVector));

通过自定义的compareByCoordX比较函数,可以根据QGraphicsItempos().x()来比较coord x的大小,从而实现对QGraphicsItemQList按照coord x进行排序。

需要注意的是,以上示例代码仅针对coord x的排序,如果需要根据coord y进行排序,只需修改比较函数compareByCoordX中的比较逻辑即可。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,建议您参考腾讯云官方文档或咨询腾讯云的技术支持团队,以获取与您需求相匹配的产品和服务信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PyQt5 图形项定义和交互(一)

如果创建一个自定义窗口部件并重新实现它绘制事件,就可以得到任何想要图形。但如果需要绘制大量单个项,或者是需要绘制用户能够进行单独交互项(例如选中、移动、复制粘贴...)...在场景中绘制项都是QGraphicsItem子类(图形项)。 图形视图类一个强大功能是图形项应用视图变换,例如缩放和旋转,这些变换可以影响场景呈现方式,但不会改变图形项自身类容。...各个视图类基本上是二维;然而每个项都有一个z值,那些z值较高项就会绘制在z值较低项之上。但碰撞检测(collision detection)只基于项(x,y)坐标。...场景可以有一个前景层,例如可以为场景中每个项绘制网格;场景也可以有一个背景层,可提供一个背景图像背景色。 项既可以是场景一些子项,也可以是其它项子项。...在对项进行定位时,是使用逻辑坐标系方式来放置它们。第三种坐标系是项所使用坐标系,它零点位于项中心,也就是该项在场景中位置。

1.8K40

qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene编程实例 图标拖动渐变效果

qt中提供了QGphicsView,QGraphicsScene,QGraphicsItem,QGraphicsPixmapItem是QGraphicsItem子类 分辨创建它们实例:view,scene...,item,然后通过各自方法scene->addItem(item);view->setScene(scene);就能够达到类似下图效果,想要进一步定制,则要继承QGraphicsItemQGraphicsPixmapItem...)-beforePos.x(),event->scenePos().y()-beforePos.y()); emit isMoving(pos); //qDebug()<<"x:"<<pos.x...MainWindow::isPressed() { selectionChanged(); mPressed = true; } //槽,当nodeui鼠标释放时运行 //应当设置标志位,让UI图片停止鼠标拖动事件响应...//推断根据是当前单击nodeui对象pos与存储在nodeUiPosListsd位置比較,相等则为单击 bool MainWindow::isNodeUiClicked() { int

1.5K10

ggplot2画散点图展示恩比德面对不同防守者百回合得分

根据以上代码可以看到作图数据总共有三列 x是防守者姓名 y是恩比德面对不同对手百回合得分 还有一列是恩比德面对不同对手总共回合数,用来控制点大小 恩比德面对不同对手百回合得分 用来映射点颜色...image.png 接下来就是这幅图进行美化 美化内容包括 旋转90度 用到代码是 ggplot(df,aes(x=def_player_name,y=pts.per.100,...image.png 按照得分大小排序 ggplot(df,aes(x=reorder(def_player_name,pts.per.100), y=pts.per.100,...image.png 注意这里是如何实现,升序和降序是经常用到 改变主题 原始代码用到是 theme_custom()这个函数。我暂时还不知道是哪个包里,或者是他自己写。...image.png 最后就是主题一些细节设置了 ggplot(df,aes(x=reorder(def_player_name,pts.per.100), y=pts.per

28910

「R」数据可视化19:环状条形图

那么要如何作图呢? 如何作环状条形图 1)需要什么样数据 我们这次使用数据以及代码来源Azandis博客[1]。我根据最终图片,整理了所需要数据。...所以我们先图像中State进行排序。具体排序规则参考了原blog代码。...排序环形图 然后我们在之前基础上标记上数值: ggplot(TP, aes(x = reorder(State, RankOrder))) + geom_col(aes(y = Trees),...= State),size=3) + coord_polar() + scale_y_continuous(limits = c(-150, 130)) +#y范围为-150到130...根据原图添加了相关坐标轴名称等,然后把两张图拼接在了一起。(有一些细节比如左上角还根据地理位置进行了划分,我就忽略啦) ? 今天分享就到这里啦。

2.3K50

制作简版消消乐(三):实现方块生成与交换

用二维数组变量 typeMap 和 tileMap 分别来装所有方块类型和组件,我们就可以根据二维坐标来获取特定类型和组件; 2-2....根据 GameConfig 中配置遍历生成类型表,然后再根据类型表生成方块: import Tile from ".....向 GameUtil 中添加一个计算滑动方向函数和一个根据坐标和方向计算目标坐标的函数: /** * 获取滑动方向 * @param startPos 开始位置 * @param endPos...null : Coord(coord.x + 1, coord.y); } } 3. 接下来在 TileManager 中更新并添加了很多变量和函数来实现方块交换逻辑。高能预警!!!...给 TileContainer 添加一个属性,并 setSelectedTile 函数进行升级: @property(cc.Node) private selectFrame: cc.Node = null

1.9K10

使用四元数计算两个分子之间RMSD(附Python代码)

本文将简要介绍如何使用四元数方法计算两个分子之间RMSD,同时附上简单示例Python代码。 1....在量子化学中,xyz文件是一种比较通用记录分子几何结构文件格式,其内容如下: 1 原子数量 2 标题 3 原子1 x1 y1 z1 4 原子2 x2 y2 z2 5 原子3 x3 y3 z3...,根据公式2可得出1.xyz和2.xyzRMSD值为0.307549。...“成本函数”,我们通过更改行列指标的“分配”,使得最后“总成本”降到最低。...此外,在上面的计算中,我们是在同类型原子之间进行编号优化,这也很好理解,比如对于甲烷分子,把C原子和H原子进行编号交换是不合理。 接下来就到了四元数参与部分了[3]。

2.6K20

C语言游戏 双缓存解决闪屏问题 详细总结

所以会有闪屏现象。 如何解决闪屏? 治标须治本——双缓存技术 何为双缓存? 我希望大家去看看这个网站:猛击这里 这个网站是我理解双缓存主要网站,何为双缓存,这位作者写得还是比较易懂。...bytes = 0; COORD: typedef struct _COORD { SHORT X; // 横坐标 SHORT Y; // 纵坐标 } COORD; //使用范例 COORD coord...如下图: 主要代码: …… #define _Y 15 //15行 #define _X 20 // 20列 char data[_Y][_X];//这是全局变量定义字符数组 …… int...; } for(i = 0;i < _Y;i++){ //打印你需要二维数组图案 for(j = 0;j < _X;j++){ if(i == 0|| i == _Y-1...|| j == 0 || j == _X-1){ data[i][j] = '*'; }else{ data[i][j] = ' '; } } } coord.Y

3.2K10

106-R可视化30-底层绘图系统grid学习之重头创建ggplot对象之一

ggplot 中指定绘图数据框,panel_scales 则是一个包括xy scale 信息列表,而coord 则是一个描述图象坐标系统对象。...panel_scales 这个包括xy scale 信息列表对象,真的是非常复杂: coord Classes 'CoordCartesian', 'Coord', 'ggproto', '...,这样方法虽然在透明度上没有什么问题,不过如果是在其他分类时,比如说按照列shape 进行区分,则在分面是可能会有一些问题。...这个主要是每次计算,geom 都会根据分类获得subgroup data 进行计算,虽然这样帮我们抽象了分组方法,但是却可能造成分面与原先数据差异,如果有这点考虑的话,建议在设计data 时,就新增用于图形属性绘制一列...这又改如何把data 中对应列给到图像呢? 只能先在此处停顿一下了。 下一部分我们继续介绍剩下内容。

77530

开源七轴myArm协作机械臂正逆运动学技术讲解

我们首先会解释正运动学和逆运动学基本概念和数学原理,然后我们将展示如何应用这些原理来计算7轴机械臂运动。我们目标是让读者机械臂运动控制有一个深入理解,并了解如何在实践中应用这些知识。...下面举一个简单例子,在一个平面坐标系当中,已知连杆感觉长度为l1和l2,并且已知两个关节转动角度分别为θ1和θ2,那么其末端执行器位置(x,y)可以根据三角函数求出。...x=l1cos(θ1)+l2cos(θ1+θ2)y=l1sin(θ1)+l2sin(θ1+θ2)就可以求出xy坐标了。...在实际应用中,我们通常会直接在三维空间中直接进行计算,我们可以使用齐次坐标来进行转换,在齐次坐标中,一个二维点(x, y)可以表示为一个三维点(x, y, 1),一个三维点(x, y, z)可以表示为一个四维点...7轴机械臂实例接下会用到pythonmyArm进行编程,用到是pymycobot库。

82520

第九节(结构、联合typedef)

如何定义、声明、使用联合 ●如何结构使用类型定义....可以声明一个名为coord结构,其中包含表示屏幕位置xy,如下所示: struct coord { int x; int y; } 关键字struct表明结构声明开始。...上面的代码声明了一个名为coord结构类型,其中包含了两个整型变量,xy。 然而,虽然声明了coord,但并未创建任何coord结构实例,也未创建x变量和y变量。 声明结构有两种方式。...一种是,在结构声明后带有一个多个变量名列表: struct coord { int X; int y; } first, second; 以上代码定义了类型为coord结构,并声明了两个coord...实际上,结构数组是强大程序设计工具。见下面详细分析。 前面介绍了如何根据程序需要定义结构类型。 通常,程序需要使用多个数据实例。

16120

C++中如何获取终端输出行数,C++清除终端输出特定一行内容

单纯使用C++ 进行编程时候,很多输出调试信息都是直接在终端输出,那么有的时候就会对终端输出信息有一定要求,那么如何进行定位终端输出信息到底输出到了哪一行呢?...y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(...STD_OUTPUT_HANDLE), coord); //回到给定坐标位置进行重新输出 } // 获取当前标准输出流位置 void getpos(int* x, int* y) {...; getpos(&x, &y); //记录当前终端输出位置 setpos(0, 2); // 回到坐标(0,2)位置进行标准输入输出 (第三行第一个字节位置) cout << " ";...// 在原本存在内容情况下,清空原本行内容 setpos(0, 2); // 回到坐标(0,2)位置进行标准输入输出 cin >> x; setpos(x, y); //回到记录位置 return

3.9K40
领券