首页
学习
活动
专区
工具
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.9K40
  • qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

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

    1.8K10

    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

    30610

    「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.7K50

    使用四元数计算两个分子之间的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.xyz的RMSD值为0.307549。...“成本函数”,我们通过更改行或列指标的“分配”,使得最后的“总成本”降到最低。...此外,在上面的计算中,我们是在同类型原子之间进行编号优化,这也很好理解,比如对于甲烷分子,把C原子和H原子进行编号交换是不合理的。 接下来就到了四元数参与的部分了[3]。

    3.2K20

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

    用二维数组变量 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

    2.1K10

    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.5K10

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

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

    83130

    第九节(结构、联合typedef)

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

    24220

    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

    4K40
    领券