我里面有一个MainWindow,一个DockWidget和一个QGLWidget。我正在QGLWidget内绘制圆圈。我想将我单击的位置的x和y坐标打印到DockWidget内的标签。

如果有人可以给我指路,我会很高兴?

最佳答案

覆盖QGLWidget的QWidget::mousePressEvent(QMouseEvent *)QWidget::mouseReleaseEvent(QMouseEvent *)并创建用于发送x和y的信号。这意味着您必须创建从QGLWidget继承的自己的类。
它可能看起来像这样:

void MyGLWidget::mouseReleaseEvent(QMouseEvent *event)
{
  emit printXY(event->pos());
}


并在MyGLWidget.h中:

signals:
void printXY(const QPointF& clickedPos);


然后在DockWidget中创建一个插槽:

public slots:
void onPrintXY(const QPointF& clickedPos);


并将其连接到创建MyGLWidget的位置。我想在DockWidget的某些功能中,例如:

void DockWidget::createGLWidget()
{
  MyGLWidget widget = new MyGLWidget;
  connect(widget, &MyGLWidget::printXY, this, &DockWidget::onPrintXY);
}

10-08 13:31