在软件运行中我需要判断鼠标所在位置下的QGraphicsItem,发现有一个Item始终没有,很好奇,就输出鼠标下所有的QGraphicsItem发现始终和预计的少一个,就是之前没有的那个,可是在显示上明明有这个item项
QGraphicsScene
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
为了帮助您解决这个问题,首先我们需要确保您的代码能正确地处理鼠标事件并获取到正确的QGraphicsItem。这里是一个基本的例子,展示了如何设置一个简单的QGraphicsView,并且当鼠标点击时,会打印出点击的QGraphicsItem。
首先,包含必要的头文件并定义一个类,例如
MyGraphicsView
,继承自QGraphicsView
:#include <QtWidgets/QApplication> #include <QtWidgets/QGraphicsScene> #include <QtWidgets/QGraphicsView> #include <QtWidgets/QGraphicsRectItem> #include <QtWidgets/QGraphicsTextItem> #include <QtGui/QPainterPath> class MyGraphicsView : public QGraphicsView { public: MyGraphicsView(QWidget *parent = nullptr) : QGraphicsView(parent) { scene_ = new QGraphicsScene(this); setScene(scene_); setDragMode(QGraphicsView::ScrollHandDrag); // 添加图形元素 addItems(); } protected: void mousePressEvent(QMouseEvent *event) override { QGraphicsView::mousePressEvent(event); QGraphicsItem *item = itemAt(event->pos()); if (item) { qDebug() << "Clicked on item: " << item->text(); // 在这里打印点击的item文本 } else { qDebug() << "No item under the cursor"; } } private: void addItems() { for (const auto &text : {"分支", "输入", "输出", ...}) { // 将所有文本替换为实际列表 QGraphicsRectItem *rect = new QGraphicsRectItem(0, 0, 100, 30, this); rect->setBrush(Qt::white); QGraphicsTextItem *textItem = new QGraphicsTextItem(text, rect); textItem->setPos(rect->boundingRect().topLeft()); scene_->addItem(rect); scene_->addItem(textItem); } } QGraphicsScene *scene_; };
然后,在主函数中创建应用程序实例、窗口和
MyGraphicsView
对象:int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.setWindowTitle("QGraphicsScene Test"); MyGraphicsView graphicsView(&window); window.show(); return app.exec(); }
这段代码将创建一个窗口,其中包含一个可以滚动查看的QGraphicsScene。当用户单击场景中的某个区域时,它会打印出被点击的QGraphicsItem的文本。
如果您已经实现了类似的功能但仍然遇到问题,可能的原因包括:
- 鼠标事件处理错误:确保您正确地覆盖了
mousePressEvent
方法。 - 物理坐标与逻辑坐标不匹配:检查您的坐标系统是否正确转换,确保鼠标位置与场景中的实际位置对应。
- QGraphicsItem状态问题:确认item是否可见、是否有父级等。
- 错误的itemAt()调用:确保在正确的上下文中调用
itemAt()
,并且传递正确的鼠标位置。
如果以上建议无法解决问题,请提供更详细的代码片段,以便我可以更好地帮助您分析问题。
解决 无用评论 打赏 举报 编辑记录- 鼠标事件处理错误:确保您正确地覆盖了
悬赏问题
- ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
- ¥15 基于蒙特卡罗法的中介效应点估计代码
- ¥15 罗技G293和UE5.3
- ¥20 Tesla 特斯拉K80显卡 如果需要使用该设备,你需要禁用系统上的另一个设备。
- ¥30 QT调用百度智能云千帆模型无法取得返回文本
- ¥50 CCD工业视觉相机检测出现光边
- ¥60 二次元手游日常任务自动化代肝(相关搜索:自动化)
- ¥15 mysql将查询的结果作为动态列名怎么实现
- ¥50 python自动地图截图脚本
- ¥15 fastreport怎么判断当前页数