我有一个MainWindow。在MainWindow我有多个Qlabel。现在,我需要找到QLabel点击。 使用MousePressEvent,我可以点击鼠标的X()和Y()位置。
我如何使用此坐标来识别QLabel?
QT中是否有任何函数可以找到使用X()和Y()坐标单击的对象?
答案 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));
答案 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()
信号,然后您可以将其绑定到插槽。