2012-09-10 28 views
8

Tôi có một MainWindow. Trên MainWindow tôi có nhiều Qlabel. Bây giờ, tôi cần phải tìm thấy QLabel nhấp vào. Sử dụng MousePressEvent, tôi có thể nhận được vị trí X() và Y() của con chuột được nhấp.Qt Cách Tìm đối tượng trên một widget bằng cách sử dụng vị trí x() và y()

Tôi có thể sử dụng Điều phối này để xác định QLabel như thế nào ??

Có chức năng nào trong QT để tìm đối tượng được nhấp bằng X() và Y() phối hợp không ??

Trả lời

9

Kể từ QLabel là một lớp con của QWidget, bạn có thể xử lý các sự kiện chuột báo ở QLabel :: mousePressEvent

virtual void mousePressEvent (QMouseEvent * ev) 

Nhưng trong QMainWindow, bạn có thể sử dụng childAt để có được những vật dụng trẻ em tại x, y

QWidget * QWidget::childAt (int x, int y) const 

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

đọc thêm tại địa chỉ: http://doc.qt.io/qt-5/qwidget.html#childAt

+1

Cảm ơn digitalSurgeon, tôi đã thử sử dụng theo cách của bạn. Nó trả lại địa chỉ. Có nghĩa là trong chế độ gỡ lỗi, nhãn hiển thị địa chỉ "@ 819d4e8". Bây giờ làm thế nào để sử dụng địa chỉ này trong việc xác định nhãn được nhấp. Vui lòng cung cấp cho tôi một số hướng dẫn khác. – skg

+1

@skg những gì bạn đang nhận được là một con trỏ đến nhãn, vì vậy bạn không cần phải làm bất cứ điều gì khác, bạn có thể gọi hàm trên con trỏ này .. 'QLabel * label = static_cast (mainWindow-> childAt (x, y)); label-> setText ("Tôi là nhãn bạn đã nhấp"); ' –

1

Sử dụng các chức năng bên trong widgetAtQApplication

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

mà sau đó bạn có thể dynamic_cast vào QLabel.

+0

Cảm ơn Ismail, bạn có thể vui lòng cung cấp thêm chút ý tưởng cho tôi không ?? Tôi đã thử điều này, nó cung cấp "0x0" mọi lúc cho bất kỳ nhãn nào. – skg

1

Thay vì cố gắng xác định nhãn nào đã được nhấp vào từ tọa độ chuột, bạn cũng có thể sử dụng phương pháp mousePressEvent() của nhãn.

Ví dụ: tạo lớp nhãn quá tải của riêng bạn và, trên mousePressEvent() phát ra tín hiệu clicked() mà sau đó bạn có thể liên kết với một vị trí.

4

Trong Qt5 này cũng làm việc

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

+1 cho QCursor :: pos() có vẻ như đang hoạt động, trong khi QMouseEvent :: pos() không hoạt động đối với tôi. – rsp1984

+0

Điều duy nhất nó không phù hợp với những gì tôi có nghĩa là bạn có thể nhận được bất kỳ con trỏ QWidget sử dụng qbject_cast cho kết quả tốt hơn – Yash

Các vấn đề liên quan