Qt:坐标/鼠标/触摸

鼠标坐标

1. 窗口坐标( 相对于窗口)
Qpoint QMouseEvent::pos(); 或 x() 或 y()
2. 全局坐标( 相对于屏幕)
Qpoint QMouseEvent::globPos(); 或 screenPos();
int x = cursor().pos().x(); 或 globalX(); 
int y = cursor().pos().y(); 或 globalY(); 
3. 窗口坐标转全局坐标
mapToGlobal()
4. 全局坐标转窗口坐标
mapFromGlobal()

控件坐标

控件相对于父窗口的坐标:QPointQWidget::pos()

鼠标事件

1. 按下
void mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)  // 左键按下
    {
    }
	}
2. 移动
自动触发:setMouseTracking(true); 
void mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() & Qt::LeftButton)
    { 
    }
}
3. 释放
void mouseReleaseEvent(QMouseEvent *event)
{
}
4. 双击
void mouseDoubleClickEvent(QMouseEvent *event)
{
}
5. 滚轮
void wheelEvent(QWheelEvent *event)
{
    if(event->delta() > 0)// 当滚轮远离使用者时
    {
    }
    else//当滚轮向使用者方向旋转时
    {
    }
}

触摸事件
设置窗口属性:setAttribute(Qt::WA_AcceptTouchEvents); // 窗口接受触摸事件
相对于窗口的位置:TouchPoint::pos()/lastPos()/lastScreenPos()
区域:TouchPoint::rect();

bool event(QEvent * event)
{
    switch (event->type())
    {
        case QEvent::TouchBegin: // 手指与触摸屏开始接触时
        {
            break;
        }
        case QEvent::TouchUpdate: // 手指与触摸屏接触过程中
        {
            break;
        }
        case QEvent::TouchEnd: // 手指离开触摸屏
        {
            QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
            QList<QTouchEvent::TouchPoint> tpList = touchEvent->touchPoints(); // 触控点
            for (int i = 0; i < tpList.size(); i++)
            {
                QTouchEvent::TouchPoint tp = tpList.at(i); // event里的数值在touchPoints里
                tp.lastPos();
            }
            event->accept();
            break;
        }
        default: break;
    }
    return QWidget::event(event);
}

焦点

当前窗口:QApplication::activeWindow()
当前窗口内的控件:QApplication::focusWidget()

QWidget *currentitem=QApplication::focusWidget();
if((currentitem!=NULL)&&(currentitem->inherits("QLineEdit"))) // 是否是某个类的实例
{
    QLineEdit *p=qobject_cast<QLineEdit *>(currentitem);
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值