《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

相关文章

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

Qt实现对Word网页的读取功能

《Qt实现对Word网页的读取功能》文章介绍了几种在Qt中实现Word文档(.docx/.doc)读写功能的方法,包括基于QAxObject的COM接口调用、DOCX模板替换及跨平台解决方案,重点讨论... 目录1. 核心实现方式2. 基于QAxObject的COM接口调用(Windows专用)2.1 环境

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

Qt实现删除布局与布局切换功能

《Qt实现删除布局与布局切换功能》在Qt应用开发中,动态管理布局是一个常见需求,比如根据用户操作动态删除某个布局,或在不同布局间进行切换,本文将详细介绍如何实现这些功能,并通过完整示例展示具体操作,需... 目录一、Qt动态删除布局1. 布局删除的注意事项2. 动态删除布局的实现步骤示例:删除vboxLay

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介