在场景中有多个图像项鼠标想选择哪一个就选择哪一个完整例子
时间: 2024-05-05 21:22:16 浏览: 46
以下是一个使用Qt的例子,在场景中添加了两个图像项,鼠标可以选择其中一个:
```cpp
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsPixmapItem>
#include <QMouseEvent>
class MyScene : public QGraphicsScene {
public:
MyScene(QObject* parent = nullptr) : QGraphicsScene(parent) {
// 加载两张图片
QPixmap image1(":/image1.png");
QPixmap image2(":/image2.png");
// 创建两个图像项
QGraphicsPixmapItem* item1 = new QGraphicsPixmapItem(image1);
QGraphicsPixmapItem* item2 = new QGraphicsPixmapItem(image2);
// 将图像项添加到场景中
addItem(item1);
addItem(item2);
}
void mousePressEvent(QGraphicsSceneMouseEvent* event) override {
// 获取当前鼠标位置下的图形项
QGraphicsItem* item = itemAt(event->scenePos(), QTransform());
// 如果有图形项,则选中它
if (item != nullptr) {
item->setSelected(true);
}
// 调用基类的鼠标事件处理函数
QGraphicsScene::mousePressEvent(event);
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建场景和视图
MyScene scene;
QGraphicsView view(&scene);
// 设置视图大小和标题
view.setWindowTitle("Select Item Example");
view.resize(400, 400);
view.show();
return app.exec();
}
```
在这个例子中,首先创建了一个继承自QGraphicsScene的自定义场景类MyScene。在MyScene的构造函数中,加载了两张图片,并将它们创建为图像项添加到场景中。
然后,重写了MyScene的鼠标事件处理函数mousePressEvent。当鼠标按下时,通过调用itemAt函数获取当前鼠标位置下的图形项。如果有图形项,则选中它。
最后,在main函数中创建了MyScene和QGraphicsView,并将其显示出来。这样,就可以在场景中选择图像项了。
阅读全文