qt c++ 设置窗口不可以拉顶部拖动
时间: 2023-10-01 20:05:40 浏览: 126
Qt无边框窗口最大化时拖拽还原代码
5星 · 资源好评率100%
要设置窗口不可拉拽顶部进行拖动,可以重载 QWidget 的 `mousePressEvent` 和 `mouseMoveEvent` 方法,然后在 `mousePressEvent` 中记录下鼠标点击时的坐标,然后在 `mouseMoveEvent` 中计算鼠标移动的距离,如果鼠标移动的距离在一定范围内,则不移动窗口,否则移动窗口。
具体实现如下:
```
void MyWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton && event->pos().y() < 30) {
m_drag = true;
m_startPos = event->globalPos() - frameGeometry().topLeft();
}
QWidget::mousePressEvent(event);
}
void MyWidget::mouseMoveEvent(QMouseEvent *event)
{
if (m_drag) {
QPoint pos = event->globalPos() - m_startPos;
if (pos.y() < 0) {
pos.setY(0);
}
move(pos);
}
QWidget::mouseMoveEvent(event);
}
void MyWidget::mouseReleaseEvent(QMouseEvent *event)
{
m_drag = false;
QWidget::mouseReleaseEvent(event);
}
```
在上面的代码中,我们重载了 QWidget 的 `mousePressEvent`、`mouseMoveEvent` 和 `mouseReleaseEvent` 三个方法,其中 `m_drag` 表示当前是否在拖动窗口,`m_startPos` 表示鼠标点击时的坐标。
在 `mousePressEvent` 中,如果鼠标左键点击并且点击的位置在窗口的顶部,则设置 `m_drag` 为真,并记录下鼠标点击时的坐标。
在 `mouseMoveEvent` 中,如果 `m_drag` 为真,则计算鼠标移动的距离,并根据移动的距离来移动窗口。需要注意的是,我们在移动窗口时,需要判断窗口移动后的位置是否超出了屏幕范围,如果超出了,则需要将窗口移动到屏幕边缘。
在 `mouseReleaseEvent` 中,将 `m_drag` 设置为假。
这样,就可以实现设置窗口不可拉拽顶部进行拖动的效果了。
阅读全文