Qt那些事(之二)

  昨天记录了一下布局和自定义标题栏的学习笔记,今天将标题栏拖动标题栏拖动实现记录一下。

  首先是标题栏的拖动。采用的方式有两种,一种是在标题类的父类中对固定坐标范围监控:

static int pos_min_x = 0;
static int pos_max_x = this->width();
static int pos_min_y = 0;
static int pos_max_y = 30;
pos_min_x = 0;



void Widget::mousePressEvent(QMouseEvent *event)
{
    mousePosition = event->pos();

    if (mousePosition.x()<=pos_min_x)
        return;

    if ( mousePosition.x()>=pos_max_x)
        return;

    if (mousePosition.y()<=pos_min_y)
        return;

    if (mousePosition.y()>=pos_max_y)
        return;
    isMousePressed = true;
}

   第二种是在标题类中重载鼠标事件。

void myTitleBar::mousePressEvent(QMouseEvent *event)
{
    startPos = event->globalPos();
    clickPos = mapToParent(event->pos());

    //setMouseTracking(true);
}

void  myTitleBar::mouseMoveEvent(QMouseEvent *event)
{
    parentWidget()->move(event->globalPos() - clickPos);
}

   鼠标按下事件会记录鼠标点击的位置,然后在mouseMoveEvent中将窗口父类移动。

posted @ 2017-09-04 23:57  小学毕业未遂  阅读(96)  评论(0)    收藏  举报