最近有个小需求,需要拖动子控件来控制父控件移动,之前想的有些复杂,最终实现后也很是简单,这里记录一下:
void MyButton::mousePressEvent(QMouseEvent *event)
{
if(event->type() == QMouseEvent::MouseButtonPress)
{
m_moveStart = true;
m_curPoint = mapToGlobal(event->pos());
}
}
void MyButton::mouseMoveEvent(QMouseEvent *event)
{
if(m_moveStart)
{
QPoint step = mapToGlobal(event->pos()) - m_curPoint;
QPoint point = step + m_parent->geometry().topLeft();
m_parent->setGeometry(QRect(point, m_parent->size()));
m_curPoint += step;
}
}
m_parent是父类的指针,这里还需要使用mapToGlobal来转换下坐标以获取全局坐标,然后传递给父类进行move,当然实际项目中比较复杂,这里仅简单看下效果: