遍历QVector<stuARLabelShow> m_vecStuARLabelShow ,如果LabelShow中point 在鼠标范围5px内则将鼠标显示可拖拽。并将数组内LabelShow.isdrag 置为true
时间: 2024-02-24 12:00:32 浏览: 57
QT,QVector 基本用法,遍历[实例讲解] - 小皮球的博客 - CSDN博客1
可以通过以下代码实现遍历过程、判断条件和修改 `isdrag` 标志位:
```c++
for(int i = 0; i < m_vecStuARLabelShow.size(); i++){
stuARLabelShow labelShow = m_vecStuARLabelShow.at(i);
QPoint labelPoint = labelShow.point;
QPoint mousePoint = QCursor::pos();
int distance = qSqrt(qPow(labelPoint.x() - mousePoint.x(), 2) + qPow(labelPoint.y() - mousePoint.y(), 2));
if(distance <= 5){
setCursor(Qt::OpenHandCursor);
m_vecStuARLabelShow[i].isdrag = true;
break;
}
}
```
其中,`m_vecStuARLabelShow` 是一个存储 `stuARLabelShow` 结构体的 QVector,`stuARLabelShow` 结构体包含一个 QPoint 类型的 point 成员变量和一个 bool 类型的 isdrag 成员变量,表示该标签在窗口中的位置以及是否可拖拽。在遍历 QVector 时,我们通过 `at` 方法获取每个结构体,然后获取该结构体的 point 成员变量。接着,我们获取当前鼠标的位置,并计算鼠标与标签位置的距离。如果距离小于等于 5 像素,则将鼠标的光标设置为可拖拽状态(OpenHandCursor),并将该结构体的 isdrag 标志位设置为 true。最后,我们退出遍历即可。这样,在后续的拖拽操作中,我们就可以根据 isdrag 标志位来判断哪些标签是可拖拽的。
阅读全文