一:无边框窗体基本实现代码
this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowMinMaxButtonsHint);二:实现鼠标拖动窗体移动
如图所示,要将窗体移动由A移动到B点,需要用知道移动后窗体的位置(窗体左上角相对桌面的位置)。而移动后鼠标的位置是可以知道的。那么只要求得点击鼠标时(移动前)鼠标相对窗体左上角的偏移diff_pos,再与鼠标移动后的位置相加就可以得到窗体移动后的位置了。
具体代码如下:
//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
private:
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
private:
QPoint diff_pos; //鼠标点击时相对窗体左上角的位移
QPoint mouse_pos; //鼠标点击时的位置
QPoint window_pos; //窗体左上角的位置
};
#endif // WIDGET_H
//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QMouseEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowMinMaxButtonsHint);
}
Widget::~Widget()
{
delete ui;
}
void Widget::mousePressEvent(QMouseEvent *event)
{
mouse_pos=event->globalPos(); //获取鼠标点击时的绝对位置
window_pos = this->pos(); //获取窗体的位置
diff_pos=mouse_pos-window_pos;//计算相对位移
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
QPoint pos = event->globalPos(); //获取鼠标移动后的绝对位置
this->move(pos-diff_pos); //设置窗体移动到的位置
}
版权声明:本文为Bizulu001原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。