Qt如何使用x()和y()位置在窗口小部件上查找对象

时间:2012-09-10 11:22:57

标签: qt

我有一个MainWindow。在MainWindow我有多个Qlabel。现在,我需要找到QLabel点击。 使用MousePressEvent,我可以点击鼠标的X()和Y()位置。

我如何使用此坐标来识别QLabel?

QT中是否有任何函数可以找到使用X()和Y()坐标单击的对象?

4 个答案:

答案 0 :(得分:10)

由于QLabel是QWidget的子类,因此您可以在QLabel :: mousePressEvent中处理鼠标按下事件

virtual void mousePressEvent ( QMouseEvent * ev )

但是在QMainWindow中,您可以使用childAt来获取x,y

的子窗口小部件
QWidget * QWidget::childAt ( int x, int y ) const

QLabel* label= static_cast<QLabel*>(mainWindow->childAt(x,y));

了解详情: http://doc.qt.io/qt-5/qwidget.html#childAt

答案 1 :(得分:4)

在Qt5中,这也有效

QTabBar *widget =(QTabBar*) qApp->widgetAt(QCursor::pos());

答案 2 :(得分:1)

使用widgetAt

中的QApplication功能
QWidget *widget = qApp->widgetAt(x,y);

然后您可以dynamic_cast进入QLabel

答案 3 :(得分:1)

您也可以使用标签的mousePressEvent()方法,而不是尝试识别从鼠标坐标点击的标签。

例如,制作您自己的重载标签类,并在mousePressEvent()发出clicked()信号,然后您可以将其绑定到插槽。