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 实现label部件中的图片随鼠标移动
- Qt drag(拖动图片)时如何设置图片某个位置与鼠标绑定在一起移动
- DataGrid实现(上下左右移动,添加删除行列,导出,表头拖动)
- sparkle中如何来实现移动变形动画(图解)
- Javascript 如何实现对象的拖动?
- 如何实现 嗨baidu,sohu空间的可拖动可定制的空间(讨论)
- 请教方法和例子:VS2003的datagrid控件,如何实现用鼠标拖动的方法选中任意区域的多个单元格,然后进行统一编辑??
- ToolStrip如何实现拖动
- 请教如何实现多选并拖动
- c#如何实现无标题栏窗口程序的移动?
- Javascript 如何实现对象的拖动?
- HTML--如何实现通过鼠标事件拖动页面图像(代码)
- DataGrid实现(上下左右移动,添加删除行列,导出,表头拖动)
- Javascript 如何实现对象的拖动?
- 如何实现动易官方网站内容页的移动菜单效果?
- c#如何实现无标题栏窗口程序的移动?
- Javascript 如何实现对象的拖动
- DataGrid实现(上下左右移动,添加删除行列,导出,表头拖动)
- HTML--如何实现通过鼠标事件拖动页面图像(代码)
- Javascript 如何实现对象的拖动?(转自闪吧)