10

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

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

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

4

4 回答 4

13

由于 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

于 2012-09-10T11:34:06.290 回答
4

在 Qt5 这也有效

QTabBar *widget =(QTabBar*) qApp->widgetAt(QCursor::pos());
于 2014-06-28T08:37:49.653 回答
2

除了尝试从鼠标坐标中识别单击了哪个标签,您还可以使用标签的mousePressEvent()方法。

例如,创建自己的重载标签类,并在mousePressEvent()发出clicked()信号时将其绑定到插槽。

于 2012-09-10T11:32:15.417 回答
1

使用widgetAt里面的函数QApplication

QWidget *widget = qApp->widgetAt(x,y);

然后你可以dynamic_cast进入QLabel.

于 2012-09-10T11:29:08.287 回答