鼠标坐标
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);
}