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

    xiaoxiao2021-12-15  27

    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); }

    转载请注明原文地址: https://ju.6miu.com/read-1000228.html

    最新回复(0)