QT如何鼠标拖着子控件移动

首先,要想让一个控件中得子控件,当鼠标左键按下时,拖动,要重写两个鼠标事件中得虚接口mousePressEvent(QMouseEvent *)和mouseMoveEvent(QMouseEvent *)

具体实现如下:

有两个成员变量

QPoint m_pos;

QPoint m_point;

void ReportImageFrame::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton)
    {
        //移动中的鼠标位置相对于初始位置的相对位置.
        QPoint relativePos = event->globalPos() - m_point;
        //然后移动窗体即可.
        this->move(m_pos + relativePos);
    }


    QWidget::mouseMoveEvent(event);
}
 

void ReportImageFrame::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {

        //记录鼠标的世界坐标.
        m_point = event->globalPos();
        //记录窗体的世界坐标.
        m_pos = this->frameGeometry().topLeft();
    }
    m_mousePress = true;
    QWidget::mousePressEvent(event);
}
 

你可能感兴趣的:(QT如何鼠标拖着子控件移动)