首页 > 其他分享 >Qt 窗口强制禁用系统阴影(自定义菜单)

Qt 窗口强制禁用系统阴影(自定义菜单)

时间:2024-11-08 10:32:38浏览次数:1  
标签:菜单 Qt WA setAttribute dia 阴影 自定义

解决方法

当只使用Qt::FramelessWindowHint时,不会显示系统阴影,因为自定义菜单一般都会添加Qt::Popup,添加Qt::Popup后系统会默认添加阴影效果。

在添加Qt::Popup后,继续添加Qt::NoDropShadowWindowHint枚举解决。

 

最小复现代码:

    QDialog *dia = new QDialog();
    dia->setWindowFlags(Qt::FramelessWindowHint|Qt::Popup);
    setAttribute(Qt::WA_TranslucentBackground);
    setAttribute(Qt::WA_StyledBackground);
    setAttribute(Qt::WA_DeleteOnClose);
    dia->setStyleSheet("background: white;");
    dia->show();

 

 发现窗口四周有阴影,当添加Qt::NoDropShadowWindowHint后解决:

    QDialog *dia = new QDialog();
    dia->setAttribute(Qt::WA_TranslucentBackground);
    dia->setAttribute(Qt::WA_StyledBackground);
    dia->setAttribute(Qt::WA_DeleteOnClose);
    dia->setWindowFlags(Qt::FramelessWindowHint|Qt::Popup|Qt::NoDropShadowWindowHint);

    QWidget *wid = new QWidget();
    wid->setStyleSheet("background: red;");
    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(wid);
    layout->setMargin(15);
    dia->setLayout(layout);
    dia->setGeometry(this->pos().x(), this->pos().y(), 100, 200);
    dia->show();

  

 

 

 

 

 

问题背景

 

Windows 默认情况下开启阴影,这就导致使用Qt做的一些透明背景自定义菜单显示不正常(例如椭圆角的菜单):

没设置系统阴影时显示正常:

 设置系统阴影后:

 主要原因是由于菜单四周是圆角,Windows窗口又不支持圆角,只能父窗口透明,子窗口圆角显示:

 

最终效果:

 

标签:菜单,Qt,WA,setAttribute,dia,阴影,自定义
From: https://www.cnblogs.com/GengMingYan/p/18534489

相关文章

  • Qt实现Http请求
    Qt中使用QNetworkAccessManager类来实现Http相关请求,本文介绍HttpGet请求的简单实用方法。下面是Qt中进行Http请求的简单步骤:定义QNetworkAccessManager指针及槽函数创建QNetworkAccessManager对象并关联槽函数在类的析构函数中删除QNetworkAccessManager对象实现槽函数调......
  • QT:简易文本编辑器
      效果 main.cpp 代码:#include"imgprocessor.h"#include<QApplication>intmain(intargc,char*argv[]){QApplicationa(argc,argv);QFontf("ZYSong18030",12);//设置显示字段格式a.setFont(f);ImgProcessorw;w.s......
  • WPF Menu控件 我也有个不能点菜的菜单
    WPFMenu控件我也有个不能点菜的菜单 Windows应用程序最常见的部分之一是菜单,有时也称为主菜单,因为应用程序中通常只有一个。菜单很实用,因为它提供了很多选项,只占用很少的空间。向其中添加菜单项非常简单-您只需向其中添加MenuItem元素,并且每个MenuItem可以具有一系列......
  • 使用C++和QT开发应用程序入门以及开发实例分享
    目录1、搭建开发环境(VS2010和QT4.8.2)2、创建一个QT窗口3、在QT窗口中添加子窗口4、QT界面布局5、QT信号(SIGNAL)和槽(SLOT)6、最后C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实......
  • 前端Vue自定义个性化三级联动自定义简洁中国省市区picker选择器
    一、 前端组件概述前端组件开发在现代前端开发中占据着至关重要的地位。随着互联网的快速发展,前端应用的规模和复杂性不断增加,传统的开发方式已经难以满足需求。前端组件开发应运而生,成为提高开发效率、代码可维护性和可复用性的关键手段。二、 组件化的重要性通过将复......
  • windows下电脑自定义磁盘图标,u盘图标,文件夹图标
    闲言更改图标要确定有ico(icon)格式图片文件,文件比例1:1,一般像素大小比例推荐128:128确保文件后缀有显示目录闲言寻找或制作ico图片直接下载网络图片制作ico文件在线制作本地制作ico磁盘/U盘图标更改文件夹图标更改寻找或制作ico图片直接下载网络图片这里推荐阿里巴巴......
  • 学习笔记(二十八):ArkUi-自定义弹窗 (CustomDialog)
    概述:CustomDialog是自定义弹窗,可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗一、创建自定义弹框1、使用@CustomDialog装饰器装饰自定义弹窗,可在此装饰器内自定义弹窗内容//自定义弹框内容@CustomDialogst......
  • Jest进阶知识:深入测试 React Hooks-确保自定义逻辑的可靠性
    测试ReactHooks在React开发中,Hooks是一个非常重要的功能模块,允许开发者在函数组件中使用状态和其他React特性。自定义Hooks作为一种公共逻辑的抽离,经常被多个组件复用,因此对其测试是非常必要的。然而,由于Hooks必须在组件内部使用,直接测试它们并不像普通函数那......
  • 第8章 利用CSS制作导航菜单作业
    1.利用CSS技术,结合链接和列表,设计并实现“山水之间”页面。浏览效果如下:HTML代码如下:<!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title>山水之间</title> <linktype="text/css"href="css/293-1.css"rel="......
  • 毕设拯救计划(二)基于QT的智能家居(Onenet云)
    文章目录前言一、效果展示二、设计思路2.1Mqtt的实现2.2音乐播放器的实现2.3虚拟键盘三、问题杂谈免责声明前言  前段时间,笔者觉得以前的STM32的智能家居太low了,于是想对其进行改进,目前的方案有以下两种:一、STM32和Linux开发板构成完整的智能车家系统,即通过MQ......