QT5 QGraphicsView获得已选中的所有QGraphicsItem,对选中的QGraphicsItem的X坐标进行排序
时间: 2023-08-26 07:28:16 浏览: 266
你可以使用QGraphicsScene的selectedItems()函数来获取所有选中的QGraphicsItem对象。然后,你可以使用QGraphicsItem的pos()函数获取每个QGraphicsItem的位置。最后,你可以使用std::sort函数对所有QGraphicsItem的位置进行排序。以下是一个示例代码:
```cpp
QList<QGraphicsItem*> selectedItems = scene->selectedItems();
QList<qreal> xPositions;
foreach(QGraphicsItem* item, selectedItems) {
xPositions << item->pos().x();
}
std::sort(xPositions.begin(), xPositions.end());
foreach(qreal xPos, xPositions) {
// do something with sorted x positions
}
```
注意:这里使用了QList容器类来存储X坐标。如果你需要对y坐标进行排序,只需将pos().x()替换为pos().y()即可。
相关问题
设置QGraphicsItem在QGraphicsView的坐标
要将QGraphicsItem放置在QGraphicsView中的特定坐标上,可以使用以下步骤:
1. 创建一个QGraphicsView对象和一个QGraphicsScene对象:
```python
view = QGraphicsView()
scene = QGraphicsScene()
view.setScene(scene)
```
2. 创建一个QGraphicsItem对象(例如QGraphicsRectItem)并设置其位置和尺寸:
```python
item = QGraphicsRectItem(0, 0, 100, 100) # 参数分别为x、、width、height
```
3. 将QGraphicsItem添加到QGraphicsScene中:
```python
scene.addItem(item)
```
4. 设置QGraphicsView的坐标系统为Scene坐标系:
```python
view.setRenderHint(QPainter.Antialiasing)
view.setRenderHint(QPainter.TextAntialiasing)
view.setRenderHint(QPainter.SmoothPixmapTransform)
view.setRenderHint(QPainter.HighQualityAntialiasing)
view.setRenderHint(QPainter.NonCosmeticDefaultPen)
view.setDragMode(QGraphicsView.ScrollHandDrag)
view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
view.setScene(scene)
```
5. 设置QGraphicsView的大小和位置:
```python
view.setGeometry(x, y, width, height) # 参数分别为x、y、width、height
```
这样,QGraphicsItem将会在指定坐标上显示在QGraphicsView中。记得在设置坐标之前,确保已经设置好了QGraphicsView的大小和位置。
qt5怎么在QGraphicsView上移动鼠标,显示坐标
在Qt5中,要在`QGraphicsView`上移动鼠标并实时显示坐标,你需要结合使用`QGraphicsScene`、`QGraphicsItem`以及一些事件处理机制。首先,创建一个`QGraphicsView`实例,并将其作为窗口的一部分。然后,设置一个`QGraphicsScene`,并在其中添加一个可以捕获鼠标输入的`QGraphicsProxyWidget`。
以下是一个简化的步骤:
1. 创建`QGraphicsScene`和`QGraphicsView`:
```cpp
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
```
2. 设置场景大小并关联窗口:
```cpp
view.setSceneRect(QRectF(0, 0, your_window_width, your_window_height));
view.show();
```
3. 添加`QGraphicsProxyWidget`:
```cpp
QGraphicsProxyWidget proxy;
proxy.setWidget(new QWidget); // 创建一个小窗口用于显示坐标
proxy.setPos(0, 0); // 设置初始位置
scene.addItem(proxy);
```
4. 实现鼠标移动事件处理:
```cpp
QObject::connect(&scene, &QGraphicsScene::mouseMoveEvent, [proxy](QGraphicsSceneMouseEvent *event) {
int x = event->scenePos().x(); // 获取鼠标在场景中的X坐标
int y = event->scenePos().y(); // 获取Y坐标
// 更新小窗口的坐标显示
proxy->widget()->setGeometry(x, y, 100, 100); // 将坐标显示在一个小窗口中
});
```
5. 启动应用程序:
```cpp
QApplication app(argc, argv);
app.exec();
```
阅读全文