Qt 实现无边框窗口1.0

目录

项目需求:

1、没有边框;

2、点击windows系统的状态栏的程序运行图标可实现最大最小化;

3、可以移动窗口;

项目实现:

[1、实现 无边框](#1、实现 无边框)

[2、实现 点击windows系统的状态栏的程序运行图标可实现最大最小化](#2、实现 点击windows系统的状态栏的程序运行图标可实现最大最小化)

[3、实现 窗口移动](#3、实现 窗口移动)

代码具体实现------基于Qt5.12.0:

.h文件

.cpp文件

英语单词:


项目需求:

1、没有边框;

2、点击windows系统的状态栏的程序运行图标可实现最大最小化;

3、可以移动窗口;

项目实现:

1、实现 无边框

2、实现 点击windows系统的状态栏的程序运行图标可实现最大最小化

cpp 复制代码
setWindowFlags(Qt::FramelessWindowHint | Qt:: WindowMinMaxButtonHint);

3、实现 窗口移动

****** Qt 中一些位置的知识 *****

a、窗口位置

this->pos() // 窗口左上角相对桌面左上角

b、鼠标位置

event->pos() //鼠标相对于应用程层序的位置

event->gloabalPos() //鼠标相对于桌面原点的位置,绝对位置

c、移动位置

void move(const QPoint &); // 移动

************************************

*****代码实现*****

需要重写两个"鼠标事件函数"

要带头文件 #include <QMouseEvent>

cpp 复制代码
//定义
void mousePressEvent(QMouse *event) override;

void mouseMoveEvent(QMouse *event) override;

//实现
void Widget::mousePressEvent(QMouseEvent *event){
    //获取的是鼠标点击窗口时的位置
    mouse_pos = event->globalPos();    //鼠标的绝对位置
    win_pos = this->pos();             //窗口的绝对位置
    diff_pos = mouse_pos - win_pos;    //鼠标 和 窗口 之间的相对位置
}

void Widget::mouseMoveEvent(QMouseEvent *event){
    //获取的是鼠标拖动是的位置
    QPoint pos = event->globalPos();

    this->move(pos - diff_pos);    //这样处理可以使窗口丝滑的拖动
}

代码具体实现------基于Qt5.12.0:

.h文件

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    void mousePressEvent(QMouseEvent * event) override;
    void mouseMoveEvent(QMouseEvent * event) override;
private:
    QPoint  mouse_pos;
    QPoint  win_pos;
    QPoint  diff_pos;
};

#endif // WIDGET_H

.cpp文件

cpp 复制代码
#include "widget.h"
#include <QMouseEvent>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);
}

Widget::~Widget()
{

}

void Widget::mousePressEvent(QMouseEvent *event){
    //获取的是鼠标点击窗口时的位置
    mouse_pos = event->globalPos();    //鼠标的绝对位置
    win_pos = this->pos();             //窗口的绝对位置
    diff_pos = mouse_pos - win_pos;    //鼠标 和 窗口 之间的相对位置
}

void Widget::mouseMoveEvent(QMouseEvent *event){
    //获取的是鼠标拖动是的位置
    QPoint pos = event->globalPos();

    this->move(pos - diff_pos);    //这样处理可以使窗口丝滑的拖动
}

英语单词:

|------------|----------------------------------|
| 单词 | 翻译 |
| frame | n. 框架;结构;画面 |
| flag | n. 旗帜,国旗;(体育运动的)信号旗,标志旗; |
| global | adj. 全球的, 全世界的 整体的, 总括的, 全面的 |
| mouse | n. 鼠标;老鼠;胆小羞怯的人 |
| event | n. 事件, 大事 运动项目 |

相关推荐
SilentSamsara9 小时前
标准库精讲:collections/itertools/functools/pathlib 实战
开发语言·vscode·python·青少年编程·pycharm
逻辑驱动的ken9 小时前
Java高频面试考点场景题17
开发语言·jvm·面试·求职招聘·春招
charlie1145141919 小时前
通用GUI编程技术——图形渲染实战(三十九)——纹理与采样器:从WIC加载到GPU渲染
开发语言·c++·图形渲染·win32
love530love9 小时前
Python 3.12 解决 MediaPipe “no attribute ‘solutions‘” 终极方案:基于全版本硬核实测的避坑指南
开发语言·人工智能·windows·python·comfyui·mediapipe·solutions
爱码小白9 小时前
Python 类五大方法 完整版学习笔记
开发语言·python
Fuly10249 小时前
java面试知识点复习
java·开发语言·面试
郭涤生9 小时前
std::condition_variable的使用及主要事项
开发语言·c++
小菜鸡桃蛋狗10 小时前
C++——list
开发语言·c++
hopetomorrow10 小时前
学习路之PHP --PHP 常用扩展及作用表
开发语言·学习·php
Lhan.zzZ10 小时前
笔记_2026.4.28_003
c++·笔记·qt·opencv