Qt6实现支持Win11无边框窗口、自动贴靠布局、缩放(上下左右、四个角拖动缩放)、双击最大化或者恢复最大化之前的位置与大小、窗口阴影实现、去除缩放黑影等基础窗口

Qt6实现支持Win11无边框窗口、自动贴靠布局、缩放(上下左右、四个角拖动缩放)、双击最大化或者恢复最大化之前的位置与大小、窗口阴影实现、去除缩放黑影等基础窗口

注意:
在Qt 6中,默认启用了高DPI缩放(High DPI Scaling),
几乎所有实现都调用到win32函数
需要有一定win32基础

展示

在这里插入图片描述

项目架构

在这里插入图片描述
在这里插入图片描述

主要功能代码

1.引入windows Api
//调用WIN API需要用到的头文件与库
#ifdef Q_OS_WIN
#include <qt_windows.h>
#include <Windowsx.h>
// 编译需要的库
#pragma comment(lib, "user32.lib")
#endif
2.去除窗口边框、设置背景透明(构造函数编写)
   //设置窗口标志为无边框
   this->setWindowFlags(Qt::FramelessWindowHint);
   // 背景透明,防止黑影
   setAttribute(Qt::WA_TranslucentBackground);
2.开启贴靠布局(构造函数编写)
#ifdef Q_OS_WIN
    HWND hwnd = reinterpret_cast<HWND>(this->winId());
    DWORD style = GetWindowLong(hwnd, GWL_STYLE);
    SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_OVERLAPPEDWINDOW);
#endif
3.缩放实现
bool Widget::nativeEvent(const QByteArray &eventType, void *message, qintptr *result) {
   
    Q_UNUSED(eventType);
#ifdef Q_OS_WIN
    MSG *param = static_cast<MSG *>(message);
    switch (param->message) {
   
    case WM_NCCALCSIZE: {
   
        // 使用window默认布局,不加这一段代码,系统无法正确进行最大化
        *result = 0;
        return true
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值