QGraphicsScene中嵌入QWidget,QWidget又嵌入QLabel,如何获得鼠标点击下的QLabel C++
时间: 2024-03-03 21:51:47 浏览: 22
可以通过在QLabel上安装事件过滤器来实现获取鼠标点击下的QLabel。
首先,在QGraphicsScene中嵌入QWidget,同时在该QWidget中嵌入QLabel。然后,为QWidget安装事件过滤器,重写eventFilter方法,在该方法中判断事件是否为鼠标点击事件。如果是,则获取事件的位置,转换为在QLabel中的位置,然后通过childAt方法获取该位置下的QLabel,即可得到鼠标点击下的QLabel。
以下是代码示例:
```c++
class MyWidget : public QWidget
{
public:
MyWidget(QWidget* parent = nullptr) : QWidget(parent)
{
label = new QLabel(this);
label->setText("Click me!");
// 安装事件过滤器
this->installEventFilter(this);
}
protected:
bool eventFilter(QObject* obj, QEvent* event) override
{
if (event->type() == QEvent::MouseButtonPress)
{
auto mouseEvent = static_cast<QMouseEvent*>(event);
QPoint pos = mouseEvent->pos();
QPoint labelPos = label->pos();
QRect labelRect = label->rect();
// 判断事件是否发生在QLabel中
if (labelRect.contains(pos - labelPos))
{
qDebug() << "QLabel clicked";
return true;
}
}
return QWidget::eventFilter(obj, event);
}
private:
QLabel* label;
};
```
在QGraphicsScene中添加MyWidget即可。