qt移动窗口
时间: 2023-07-05 18:04:23 浏览: 97
qt实现动态小窗口
在 Qt 中,可以通过重写 QWidget 的 mousePressEvent、mouseMoveEvent 和 mouseReleaseEvent 函数来实现移动窗口的功能。
首先,在 QWidget 的子类中重写 mousePressEvent 函数,记录当前鼠标位置和窗口位置的差值:
```cpp
void MyWidget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
m_dragPosition = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}
```
然后,在重写 mouseMoveEvent 函数时,判断鼠标左键是否按下,如果按下,则计算窗口新的位置,并将窗口移动到新位置:
```cpp
void MyWidget::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton)
{
move(event->globalPos() - m_dragPosition);
event->accept();
}
}
```
最后,在重写 mouseReleaseEvent 函数时,清空记录的鼠标位置和窗口位置的差值:
```cpp
void MyWidget::mouseReleaseEvent(QMouseEvent *event)
{
m_dragPosition = QPoint();
event->accept();
}
```
完整的代码如下:
```cpp
#include <QWidget>
#include <QMouseEvent>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {}
protected:
void mousePressEvent(QMouseEvent *event) override
{
if(event->button() == Qt::LeftButton)
{
m_dragPosition = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}
void mouseMoveEvent(QMouseEvent *event) override
{
if(event->buttons() & Qt::LeftButton)
{
move(event->globalPos() - m_dragPosition);
event->accept();
}
}
void mouseReleaseEvent(QMouseEvent *event) override
{
m_dragPosition = QPoint();
event->accept();
}
private:
QPoint m_dragPosition;
};
```
将上述代码应用到你的窗口中,就可以实现移动窗口的功能了。
阅读全文