当前位置: 首页 > news >正文

Qt无边框设计

//指定窗口为无边框
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);

重写鼠标事件:

void mousePressEvent(QMouseEvent* event) override;
void mouseMoveEvent(QMouseEvent* event) override;

定义位置:

QPoint diff_pos;//鼠标和窗口的相对位移QPoint window_pos;//绝对位置QPoint mouse_pos;
void QtWidgetsApplication2::mousePressEvent(QMouseEvent * event)
{mouse_pos = event->globalPos();window_pos = this->pos();diff_pos = mouse_pos - window_pos;}void QtWidgetsApplication2::mouseMoveEvent(QMouseEvent * event)
{QPoint pos = event->globalPos();this->move(pos - diff_pos);
}

再创建一个widget作为标题栏,并定义好控件:

#include <QWidget>
#include <QLabel>
#include <QPushButton>class CTitleBar : public QWidget
{Q_OBJECTpublic:CTitleBar(QWidget *parent = nullptr);~CTitleBar();private:void init();private:QLabel* logo;QLabel* title;QPushButton* set;QPushButton* min;QPushButton* max;QPushButton* close;
};

初始化控件:

void CTitleBar::initUI()
{logo = new QLabel(this);title = new QLabel(this);title->setText(u8"标题");title->setFixedWidth(120);set = new QPushButton(this);set->setFixedSize(32, 32);min = new QPushButton(this);min->setFixedSize(32, 32);max = new QPushButton(this);max->setFixedSize(32, 32);close = new QPushButton(this);close->setFixedSize(32, 32);QHBoxLayout* lay = new QHBoxLayout(this);lay->addWidget(logo);lay->addWidget(title);lay->addWidget(set);lay->addWidget(min);lay->addWidget(max);lay->addWidget(close);lay->setContentsMargins(5, 5, 5,5);
}

实现无边窗口的拉伸、改变大小:

重写nativeEvent:

#include <qt_windows.h>
bool nativeEvent(const QByteArray& eventType, void* message, long* result) override;bool QtWidgetsApplication2::nativeEvent(const QByteArray & eventType, void * message, long * result)
{MSG* param = static_cast<MSG*>(message);switch (param->message){case WM_NCHITTEST:{int nX = GET_X_LPARAM(param->lParam) - this->geometry().x();int nY = GET_Y_LPARAM(param->lParam) - this->geometry().y();/*if (childAt(nX, nY) != nullptr)return QWidget::nativeEvent(eventType, message, result);*/if (nX > m_nBorderWidth && nX < this->width() - m_nBorderWidth &&nY > m_nBorderWidth && nY < this->height() - m_nBorderWidth){if (childAt(nX, nY) != nullptr)return QWidget::nativeEvent(eventType, message, result);}if ((nX > 0) && (nX < m_nBorderWidth))*result = HTLEFT;if ((nX > this->width() - m_nBorderWidth) && (nX < this->width()))*result = HTRIGHT;if ((nY > 0) && (nY < m_nBorderWidth))*result = HTTOP;if ((nY > this->height() - m_nBorderWidth) && (nY < this->height()))*result = HTBOTTOM;if ((nX > 0) && (nX < m_nBorderWidth) && (nY > 0)&& (nY < m_nBorderWidth))*result = HTTOPLEFT;if ((nX > this->width() - m_nBorderWidth) && (nX < this->width())&& (nY > 0) && (nY < m_nBorderWidth))*result = HTTOPRIGHT;if ((nX > 0) && (nX < m_nBorderWidth)&& (nY > this->height() - m_nBorderWidth) && (nY < this->height()))*result = HTBOTTOMLEFT;if ((nX > this->width() - m_nBorderWidth) && (nX < this->width())&& (nY > this->height() - m_nBorderWidth) && (nY < this->height()))*result = HTBOTTOMRIGHT;return true;}}return false;
}

启用鼠标悬停事件:

setAttribute(Qt::WA_Hover)

相关文章:

Qt无边框设计

//指定窗口为无边框 this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);重写鼠标事件&#xff1a; void mousePressEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override;定义位置&#xff1a; QPoint dif…...

规则引擎Drools使用,0基础入门规则引擎Drools(二)高级语法

文章目录 系列文章索引五、规则属性1、enabled属性2、dialect属性3、salience属性4、no-loop属性5、activation-group属性6、agenda-group属性7、auto-focus属性8、timer属性9、date-effective属性10、date-expires属性 六、Drools高级语法1、global全局变量2、query查询3、fun…...

C语言二十三弹---求第N项斐波那契数列的值

C语言求第N项斐波那契数列的值 定义&#xff1a;斐波那契数列指的是这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xff0c;89…自然中的斐波那契数列&#xff0…...

Pickcode:教孩子们编码的新视觉语言

Pickcode 通过视觉课程、聊天机器人、游戏和绘图来教授编程。 Pickcode 是一种新的语言和编辑器&#xff0c;可以直观地指导用户编写代码来制作聊天机器人、动画图画和游戏。Pickcode 旨在让用户在学习更高级的语言之前能够充满信心地开始学习编码。 Pickcode 可视化编程语言…...

乐划锁屏插画大赏热度持续,进一步促进价值内容的创造与传播

锁屏,原本只是为了防止手机在口袋里“误触”而打造的功能,现如今逐渐成为文化传播领域的热门入口。乐划锁屏不断丰富锁屏内容和场景玩法,通过打造“乐划锁屏插画大赏”系列活动为广大内容创作者提供了更多展示自我的机会,丰富平台内容。 从2020年到2023年,乐划锁屏插画大赏已连…...

【ArcGIS Pro微课1000例】0034:矢量数据几何校正案例(Spatial Adjustment)

本案例讲解矢量数据几何校正,根据一个矢量数据去校正另外一个矢量数据。 文章目录 一、加载实验数据二、空间校正三、注意事项一、加载实验数据 在ArcGIS Pro中加载数据效果如下: design:需要校正的数据图层plan+roadcenter:目标图层可以看到,design图层没有在正确的位置…...

2023亚太杯数学建模B题:玻璃温室中的微气候法规,思路模型代码论文

问题B 玻璃温室中的微气候法规 赛题思路&#xff1a;思路获取见文末名片&#xff0c;第一时间更新 温室作物的产量受到各种气候因素的影响&#xff0c;包括温度、湿度和风速[1]。其中&#xff0c;适 宜的温度和风速是植物生长[2]的关键。为了调节玻璃温室内的温度、风速等气…...

Eclipse常用设置-乱码

在用Eclipse进行Java代码开发时&#xff0c;经常会遇到一些问题&#xff0c;记录下来&#xff0c;方便查看。 一、properties文件乱码 常用的配置文件properties里中文的乱码&#xff0c;不利于识别。 处理流程&#xff1a;Window -> Preferences -> General -> Ja…...

MySQL面试,MySQL事务,MySQL锁,MySQL集群,主从,MySQL分区,分表,InnoDB

文章目录 数据库-MySQLMySQL主从、集群模式简单介绍1、主从模式 Replication2、集群模式3、主从模式部署注意事项 UNION 和 UNION ALL 区别分库分表1.垂直拆分2、水平拆分 MySQL有哪些数据类型1、整数类型**&#xff0c;2、实数类型**&#xff0c;3、字符串类型**&#xff0c;4…...

HarmonyOS应用开发者认证题目满分指南

为了帮助大家快速的上手HarmonyOS应用程序开发&#xff0c;官方制作了一些免费的课程&#xff1a;HarmonyOS第一课。每个课程后面都有一些练习题&#xff0c;下面就是这些题目的满分答案。 【习题】运行Hello World工程 判断题 1.DevEco Studio是开发HarmonyOS应用的一站式集…...

openssl+ SM2 + linux 签名校验开发实例(C++)

文章目录 一、SM2校验理论基础二、SM2签名校验开发实例&#xff08;C&#xff09; 一、SM2校验理论基础 SM2的校验过程是使用椭圆曲线上的公钥验证签名的有效性。以下是SM2校验的理论基础相关知识点&#xff1a; SM2签名算法&#xff1a; SM2的校验基于椭圆曲线数字签名算法&a…...

有关Vue、微信小程序、UniApp中的CSS中的宽度width单位、自适应

在Vue中&#xff0c;可以使用以下单位来设置宽度&#xff08;width&#xff09; 像素&#xff08;px&#xff09;&#xff1a;最常用的单位&#xff0c;表示一个绝对长度单位。例如&#xff0c;width: 200px; 表示宽度为200像素。百分比&#xff08;%&#xff09;&#xff1a;…...

黑马React18: ReactRouter

黑马React: ReactRouter Date: November 21, 2023 Sum: React路由基础、路由导航、导航传参、嵌套路由配置 路由快速上手 1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候&#xff0c;path 对应的组件会在页面中进行渲染 2. …...

算法刷题-动态规划-1

算法刷题-动态规划-1 不同路径不同路径||方法一&#xff1a;方法二 第N个泰波那契数递归写法滚动数组 三步问题递归操作滚动数组 使用最小画法爬楼梯递归 解码方法方法一方法二&#xff1a;&#xff08;大佬讲解&#xff09; 不同路径 //机器人不同的路径进入到指定的地点 publ…...

分享一篇很就以前的文档-VMware Vsphere菜鸟篇

PS&#xff1a;由于内容是很久以前做的记录&#xff0c;在整理过程中发现了一些问题&#xff0c;简单修改后分享给大家。首先ESXI节点和win7均运行在VMware Workstation上面&#xff0c;属于是最底层&#xff0c;而新创建的CentOS则是嵌套后创建的操作系统&#xff0c;这点希望…...

QT中的lambda表达式

面是对Qt中在QObject::connect()中的lambda表达式常用用法 QString str("I am a string!"); devicestr; connect(ui- connect(m_imgshowUI, &ImgShow::GetImgPath, m_visionplatform, [](const std::string filename){m_visionplatform->ReadImg(filename);}…...

linux文件I/O:文件锁的概念、函数以及代码实现

文件锁是一种用来保证多个进程对同一个文件的安全访问的机制。文件锁可以分为两种类型&#xff1a;建议性锁和强制性锁。建议性锁是一种协作式的锁&#xff0c;它只有在所有参与的进程都遵守锁的规则时才有效。强制性锁是一种强制式的锁&#xff0c;它由内核或文件系统来强制执…...

MySQL数据库系统教程

目录 基础篇 通用语法及分类 DDL&#xff08;数据定义语言&#xff09; 数据库操作 表操作 DML&#xff08;数据操作语言&#xff09; 添加数据 更新和删除数据 DQL&#xff08;数据查询语言&#xff09; 基础查询 条件查询 聚合查询&#xff08;聚合函数&#xff0…...

这样写postman实现参数化,阿里p8都直呼牛逼

什么时候会用到参数化 比如&#xff1a;一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块&#xff1a;正确的用户名&#xff0c;密码 成功&#xff1b;错误的用户名&#xff0c;正确的密码 失败 postman实现参数化 在实际的接口测试中&#xff0c;部分参数…...

【Qt-25】控件篇

一、comboBox控件 1、获取item数量 ui->comboBox_2->count(); 2、根据索引值获取文本 ui->comboBox->itemText(i); 3、调整当前显示文本内容 ui->comboBox->setCurrentIndex(j); 4、添加item ui->comboBox->addItem("");//添加一个内…...

从muduo到TinyWebServer:深入理解C++网络库中的Buffer设计精髓

从muduo到TinyWebServer&#xff1a;C网络库中的Buffer设计哲学与实践 在构建高性能网络服务时&#xff0c;数据缓冲区的设计往往是决定系统吞吐量和响应速度的关键因素。当我们从传统的阻塞式IO转向非阻塞模型时&#xff0c;原有的简单读写模式不再适用——数据可能分多次到达…...

R 4.5低代码与tidyverse无缝融合指南:如何在零修改原有R脚本前提下启用可视化编排?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;R 4.5低代码与tidyverse融合的核心范式 R 4.5 引入了原生支持函数式管道&#xff08;|>&#xff09;与更健壮的错误处理机制&#xff0c;为低代码开发范式在数据科学工作流中落地提供了语言级支撑。…...

超越COCO:手把手教你用Detic(21K类别)和ONNX Runtime打造通用物体识别Demo

通用物体识别新纪元&#xff1a;Detic与ONNX Runtime在C#中的实战应用 1. 从COCO到ImageNet-21K&#xff1a;物体检测的范式转移 传统物体检测模型如COCO&#xff08;80类&#xff09;和VOC&#xff08;20类&#xff09;已无法满足现代应用需求。Detic&#xff08;Detecting Tw…...

R 4.5多核加速失效真相(CPU利用率不足42%?深度剖析parallel::mclapply隐式锁竞争)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;R 4.5并行计算性能瓶颈的系统性认知 R 4.5 引入了对并行后端&#xff08;如 parallel、future 和 clustermq&#xff09;更严格的资源调度约束&#xff0c;但其底层 C/Fortran 接口在多线程共享内存场景…...

G-Helper开源神器:华硕笔记本性能掌控与硬件优化的终极解决方案

G-Helper开源神器&#xff1a;华硕笔记本性能掌控与硬件优化的终极解决方案 【免费下载链接】g-helper G-Helper is a fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Z…...

别再手动一篇篇找了!用Python+Sci-Hub批量下载论文,附最新可用域名获取方法

科研效率革命&#xff1a;Python自动化文献获取系统搭建指南 在深夜的实验室里&#xff0c;面对数百篇待下载的文献&#xff0c;你是否也曾感到绝望&#xff1f;每个科研工作者都经历过手动逐篇搜索、点击、保存的繁琐过程&#xff0c;这不仅消耗宝贵的研究时间&#xff0c;更打…...

Dify 2026 API网关安全加固实战指南(2024 Q3最新FIPS 140-3合规配置清单)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Dify 2026 API网关安全加固概述 Dify 2026 版本对内置 API 网关实施了纵深防御架构升级&#xff0c;重点强化身份验证、流量控制与敏感数据防护能力。本次加固不再依赖单一鉴权机制&#xff0c;而是融合…...

Windows APK安装器终极指南:告别模拟器,直接在电脑上安装Android应用

Windows APK安装器终极指南&#xff1a;告别模拟器&#xff0c;直接在电脑上安装Android应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为在Windows电脑上运行…...

Windows Internals 读书笔记 10.5.8:ETW 安全机制,不只是记录日志,更是权限与证据链管理

&#x1f525;个人主页&#xff1a;杨利杰YJlio❄️个人专栏&#xff1a;《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》&#x1f31f; 让复杂的事情更…...

统信UOS远程协助实战:从内网到外网,手把手教你用自带工具搞定远程桌面

统信UOS远程协助全场景实战指南&#xff1a;内网穿透与公网直连的终极解决方案 在数字化转型浪潮中&#xff0c;远程办公已成为企业运营和个人工作的刚需。统信UOS作为国产操作系统的佼佼者&#xff0c;其内置的远程协助工具凭借原生集成、安全稳定和操作简便三大优势&#xff…...