在软件运行中我需要判断鼠标所在位置下的QGraphicsItem,发现有一个Item始终没有,很好奇,就输出鼠标下所有的QGraphicsItem发现始终和预计的少一个,就是之前没有的那个,可是在显示上明明有这个item项

在软件运行中我需要判断鼠标所在位置下的QGraphicsItem,发现有一个Item始终没有,很好奇,就输出鼠标下所有的QGraphicsItem发现始终和预计的少一个,就是之前没有的那个,可是在显示上明明有这个item项

关注引自免费微信小程序:皆我百晓生
为了帮助您解决这个问题,首先我们需要确保您的代码能正确地处理鼠标事件并获取到正确的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方法。itemAt(),并且传递正确的鼠标位置。如果以上建议无法解决问题,请提供更详细的代码片段,以便我可以更好地帮助您分析问题。