您的位置:首页 > 编程语言 > Qt开发

Qt如何实现子部件在父部件上移动拖动

2016-12-08 16:07 183 查看
Qt如何实现子部件在父部件上移动拖动。如上面例子,实现黄色子widget在橙色父widget上移动。首先要确定子widget的parent是背景widget,然后需要在子widget中重载鼠标事件函数在mouseMoveEvent函数中move自己的位置。首先要理解move函数就是将widget的左上点移动到指定的位置。在mouseMoveEvent函数中,需要确定图中4个点,上图表示子widget,oldPoint是鼠标点在部件上的位置,初始时,mousePressEvent中获取的鼠标点击的位置。当部件移动时,oldPoint记录的是鼠标上次移动所在的位置。e->pos 是指moseMoveEvent函数中获取的鼠标移动的位置。TopLeft是widget的左上点的位置,也就是geometry().topLeft();moveto所表示的点就是子widget所要移动到的点,也就是需要计算得到的点。上面的关系滤清后,运用初中知识的值,在平面中,平行移动的距离是相等的,moveto=e->pos - oldpoint + Topleft;详细代码如下:
void PreviewToolButton::mousePressEvent(QMouseEvent *e){if(e->button()==Qt::LeftButton)m_oldPoint=e->pos();QWidget::mousePressEvent(e);}void PreviewToolButton::mouseMoveEvent(QMouseEvent *e){QPoint oldPoint=m_oldPoint;QPoint moveToPoint=e->pos()-oldPoint+geometry().topLeft();move(moveToPoint);oldPoint=moveToPoint;QWidget::mouseMoveEvent(e);}void PreviewToolButton::mouseReleaseEvent(QMouseEvent *e){if(e->button()==Qt::LeftButton)m_bButtonPressed=false;QWidget::mouseReleaseEvent(e);}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt