我有一个主窗口。在 MainWindow 我有多个 Qlabel。现在,我需要找到点击的 QLabel。使用 MousePressEvent,我可以获得鼠标点击的 X() 和 Y() 位置。
我如何使用这个坐标来识别 QLabel?
QT 中是否有任何函数可以使用 X() 和 Y() 坐标找到单击的对象?
我有一个主窗口。在 MainWindow 我有多个 Qlabel。现在,我需要找到点击的 QLabel。使用 MousePressEvent,我可以获得鼠标点击的 X() 和 Y() 位置。
我如何使用这个坐标来识别 QLabel?
QT 中是否有任何函数可以使用 X() 和 Y() 坐标找到单击的对象?
由于 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));
在 Qt5 这也有效
QTabBar *widget =(QTabBar*) qApp->widgetAt(QCursor::pos());
除了尝试从鼠标坐标中识别单击了哪个标签,您还可以使用标签的mousePressEvent()
方法。
例如,创建自己的重载标签类,并在mousePressEvent()
发出clicked()
信号时将其绑定到插槽。
使用widgetAt
里面的函数QApplication
QWidget *widget = qApp->widgetAt(x,y);
然后你可以dynamic_cast
进入QLabel
.