【问题标题】:Qt: How to Find the Position of the Mouseclick Relative to an ImageQt:如何找到鼠标点击相对于图像的位置
【发布时间】:2018-11-08 23:15:14
【问题描述】:

我想实现一个图像编辑器。我在 QHBoxLayout 的 QLabel 中有一个 QPixmap。我已经覆盖了父小部件中的 mousePressEvent。当 mousePressedEvent 发生时,

 event->pos() = QPoint(271,115)

指向相对于指针(鼠标)移动的位置。位移是 QLabel 到 QWidget 角落的距离。当我调整窗口大小时它会变大。我如何找到这个位移矢量?我想在 QPixmap 上准确地在鼠标所在的位置绘制一个像素。 请注意,以下方法无法补救:

qDebug() << "event->pos()" << event->pos();
qDebug() << "this->pos() = " << this->pos();
qDebug() << "pm_imageLabel->pos() =" << pm_imageLabel->pos();
qDebug() << "pos = " << mapFromGlobal(QCursor::pos());

这些给出了所有不同的位置。没有在互联网上或 Qt 的文档中搜索让我更接近答案。提前谢谢你。

【问题讨论】:

  • 我认为您必须从鼠标事件位置中减去标签的位置才能获得相对于标签左上角的坐标,即event-&gt;post() - pm_imageLabel-&gt;pos();。但是,您为什么不在 QLabel 中处理鼠标事件呢?

标签: qt mouseevent mousepress


【解决方案1】:

最后,在 vahancho 的帮助下,我部分弄明白了。 QPixmap 与 QLabel 的位置很难确定,但我可以禁止 QLabel 调整大小。所以我将QLabel的大小设置为图片大小。

pm_imageLabel->setPixmap(m_pixmap);
pm_imageLabel->setFixedSize(m_pixmap.size());

我甚至覆盖了 mousePressed inside QLabel 类。这样 event->pos 是正确的。

谢谢。

【讨论】:

  • 遇到了同样的问题,我使用的是imLbl-&gt;resize(mpixmap.size());,但这还不够。你的解决方案解决了。
  • 我知道已经有一段时间了,但是如果您的回答对您有所帮助。也许你应该接受你的答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
相关资源
最近更新 更多