10

MainWindowがあります。MainWindowには、複数のQlabelがあります。ここで、クリックされたQLabelを見つける必要があります。MousePressEventを使用して、クリックされたマウスのX()およびY()位置を取得できます。

この座標を使用してQLabelを識別するにはどうすればよいですか?

X()およびY()座標を使用してクリックされたオブジェクトを見つけるためのQTの関数はありますか?

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 に答える