• 6300阅读
  • 5回复

怎么才能从鼠标移动事件中,获得绘图部件中的逻辑坐标??? [复制链接]

上一主题 下一主题
离线liaowei5566
 

只看楼主 倒序阅读 楼主  发表于: 2011-04-03
如题,我已经在paintEvent中设定
QStylePainter painter(this);
painter.setWindow(-50,-50,100,100);  //设定窗口
painter.drawLine(0,0,10,10);  //画一条线
然后
void MapControl2D::mouseMoveEvent(QMouseEvent *event)
{
  mousePoint2d =event->globalPos();  //获取鼠标指针上的点坐标

  emit backTipPoints2d();  //发射信号
}
emit backTipPoints2d();  //发射信号  之后我在主窗体上,已经能实现坐标值显示
但是若用event->pos();  则只能显示出视口坐标,若用上面的坐标却又与我的逻辑坐标不同。。

event在QT中帮助说有很多个获取坐标的函数,我该用那个才能从鼠标移动事件中获得我定义的逻辑坐标呢?
我试了很多个都没成功呢。。万分感谢啊。。。

const QPoint &QMouseEvent::globalPos () const
Returns the global position of the mouse cursor at the time of the event
中 global position 是指什么位置。。原点不知道那去了
[ 此帖被liaowei5566在2011-04-04 16:38重新编辑 ]
离线liaowei5566

只看该作者 1楼 发表于: 2011-04-04
咋没人顶呢。。。自己顶一下
离线wxj120bw

只看该作者 2楼 发表于: 2011-04-04
楼主关注下deviceTransform和inverted这两个函数,能实现从界面坐标到逻辑坐标的转换。
离线liaowei5566

只看该作者 3楼 发表于: 2011-04-10
嗷,谢谢了,

我其他办法把这个问题解决了,主要是用C++ GUI Qt 4中第五章的相关内容,自己写了个逻辑跟视口坐标的转换。效果还可以,定义了屏幕矩形和视口之间的关系
离线liaowei5566

只看该作者 4楼 发表于: 2011-04-10
QPointF MapControl2D::PpToLp(QPoint &ptPp)   //物理坐标到逻辑坐标
{
    MapControl2dSettings mapSettings = zoomStack[curZoom];
    double dx;
    double dy;

    dx = mapSettings.minX + (1 + ptPp.x()*mapSettings.spanX() - mapGridRect.left()*mapSettings.spanX())/mapGridRect.width();
    dy = mapSettings.minY + (mapGridRect.bottom()*mapSettings.spanY() - ptPp.y()*mapSettings.spanY() + 1)/mapGridRect.height();

    return QPointF(dx,dy);
}
其中mapGridRect就是那个例子里面的窗口矩形
[ 此帖被liaowei5566在2011-04-10 16:35重新编辑 ]
离线0sidamingbu0
只看该作者 5楼 发表于: 2011-04-29
顶你一下 支持共享精神!!
快速回复
限100 字节
 
上一个 下一个