QGraphicsScene中嵌入QWidget,QWidget又嵌入QLabel,如何获得鼠标点击下的QLabel C++
时间: 2024-03-04 13:48:11 浏览: 58
首先需要在QGraphicsScene中重载mousePressEvent函数,然后使用itemAt函数判断点击位置是否在QLabel所在的QWidget范围内,如果是则获取该QLabel的指针。
示例代码如下:
```c++
void MyGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// 获取点击位置坐标
QPointF pos = event->scenePos();
// 获取点击位置下的item
QGraphicsItem *item = itemAt(pos, QTransform());
if (item) {
// 判断item是否为QWidget类型
QWidget *widget = qobject_cast<QWidget*>(item->toGraphicsObject());
if (widget) {
// 获取QWidget内部的QLabel
QLabel *label = widget->findChild<QLabel*>("myLabel");
if (label) {
// 获取到了QLabel指针,可以进行后续操作
qDebug() << "Clicked on QLabel: " << label->text();
}
}
}
// 调用基类函数
QGraphicsScene::mousePressEvent(event);
}
```
其中,"myLabel"是QLabel的objectName属性,需要在QWidget中设置。
阅读全文