《QT实用小工具·四十一》无边框窗口

2024-04-25 21:44

本文主要是介绍《QT实用小工具·四十一》无边框窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、概述
源码放在文章末尾

该项目实现了无边框窗口效果,项目demo如下所示:
在这里插入图片描述

项目代码如下所示:

#include "framelesswindow.h"
#include <QGuiApplication>
#include <QScreen>#ifdef Q_OS_WIN
#include <windowsx.h>
#endifFramelessWindow::FramelessWindow(QWindow *parent): QQuickWindow (parent)
{setFlags(flags() | Qt::FramelessWindowHint);#ifdef Q_OS_WINHWND hwnd = reinterpret_cast<HWND>(winId());LONG style = GetWindowLong(hwnd, GWL_STYLE);SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CAPTION);
#endif//在这里改变默认移动区域//只有鼠标在移动区域内,才能移动窗口connect(this, &QQuickWindow::widthChanged, this, [this](int arg){m_moveArea.setWidth(arg - 16);});
}bool FramelessWindow::resizable() const
{return m_resizable;
}void FramelessWindow::setResizable(bool resizable)
{if (m_resizable != resizable) {m_resizable = resizable;emit resizableChanged();}
}bool FramelessWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
#ifdef Q_OS_WINMSG* msg = reinterpret_cast<MSG*>(message);switch(msg->message) {case WM_NCCALCSIZE:{*result = 0;return true;}case WM_NCHITTEST:{auto x = GET_X_LPARAM(msg->lParam) - this->x();auto y = GET_Y_LPARAM(msg->lParam) - this->y();auto w = width();auto h = height();if (m_resizable) {if (x >= 0 && x <= 8 && y >= 0 && y <= 8) {*result = HTTOPLEFT;return true;} else if (x > 8 && x < (w - 8) && y >= 0 && y <= 8) {*result = HTTOP;return true;} else if (x >=(w - 8) && x <= w && y >= 0 && y <= 8) {*result = HTTOPRIGHT;return true;} else if (x >= 0 && x <= 8 && y > 8 && y < (h - 8)) {*result = HTLEFT;return true;} else if (x >=(w - 8) && x <= w && y > 8 && y < (h - 8)) {*result = HTRIGHT;return true;} else if (x >= 0 && x <= 8 && y >= (h - 8) && y <= h) {*result = HTBOTTOMLEFT;return true;} else if (x > 8 && x < (w - 8) && y >= (h - 8) && y <= h) {*result = HTBOTTOM;return true;} else if (x >=(w - 8) && x <= w && y >= (h - 8) && y <= h) {*result = HTBOTTOMRIGHT;return true;}}if (m_moveArea.contains(x, y)){*result = HTCAPTION;return true;} else {*result = HTCLIENT;return true;}}default:break;}
#endifreturn QQuickWindow::nativeEvent(eventType, message, result);
}

源码下载

这篇关于《QT实用小工具·四十一》无边框窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935875

相关文章

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放