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中将窗口父类移动。

浙公网安备 33010602011771号