创建项目

创建一个主窗口为 QWidget 类、带 UI样式表的项目。我的项目名叫 NightDark,窗口类名叫 Widget,刚入门的小白可以跟我命名保持一致方便学习,大佬自便。(不对,大佬怎么来光临我的教程了,请受我一拜)

完成创建后项目应该是这样子的:

去除边框

打开 widget.cpp,在构造函数 Widget::Widget(QWidget *parent) 中加入一句代码即可去除系统默认边框:

setWindowFlag(Qt::FramelessWindowHint);

此时 widget.cpp 中完整代码应该是这样的:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);setWindowFlag(Qt::FramelessWindowHint);  //设置无边框样式
}Widget::~Widget()
{delete ui;
}

运行效果如下:

编辑UI

双击 widget.ui 打开 UI 编辑器


在左侧组件库中选择 Containers 中的 Widget,拖入窗口中。右键新拖入的 Widget,修改组件名称为 shadowWidget(这个名字可以自己取)。然后右键 shadowWidget 以外的主窗口,选择 布局 - 水平布局(垂直布局也行)。

这样,shadowWidget 就会随着主窗口的大小变化而变化,默认与主窗口保持 9px 大小的边框。


右键 shadowWidget,选择 更改样式表…,在样式表对话框中输入:

background-color: rgb(57, 58, 60);
border-radius: 3px;

表示将背景颜色设置为 (57, 58, 60),并设置大小为 3px 的圆角。


此时运行程序,我们会发现黑色窗口外面有一圈灰色的框。别急,这是我们预留来绘制阴影的区域。

透明背景

编辑完UI后,切换回 widget.cpp


在构造函数 Widget::Widget(QWidget *parent) 中加入代码:

setAttribute(Qt::WA_TranslucentBackground);

这句代码是用来将窗口背景设置为全透明的。此时运行程序就会发现,刚才多出来的灰色边框被隐藏起来了。

添加阴影

这里将要用到两个头文件,需要填加在代码的开头。放在 widget.cppwidget.h 里都可以:

#include <QColor>
#include <QGraphicsDropShadowEffect>

其中,QColor 用来生成颜色对象,QGraphicsDropShadowEffect 用来生成阴影效果对象。

然后,在构造函数 Widget::Widget(QWidget *parent) 中加入代码:

    QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect();   //创建阴影效果对象shadow->setBlurRadius(9);                       //设置阴影大小为9pxshadow->setOffset(0);                           //设置阴影偏移距离为0pxshadow->setColor(QColor(0, 0, 0, 100));         //设置阴影颜色为透明度为100的(0,0,0)(黑色)ui->shadowWidget->setGraphicsEffect(shadow);    //给shadowWidget窗口添加该阴影

到这里,阴影效果就成功地添加到窗口上了。运行效果如下:

Qt 暗夜黑主题教程(一) 创建带圆角和阴影的无边框窗口相关推荐

  1. Qt Quick无边框窗口

    开发环境:Qt Creator 5.6 内容:  使用 Qt  Quick创建无边框窗口 Qt Quick是一个无比强大.无比方便快捷的跨平台的开发框架,并且能通过Qt强大的元对象系统实现qml与c+ ...

  2. 【C++·Qt】Qt透明无边框窗口以及拖动

    窗口透明  1.窗口整体透明(包含其子空控件) //窗口以及子控件都透明 //setAttribute(Qt::WA_WState_WindowOpacitySet); //网上说直接设置不起作用,需 ...

  3. QT实现可移动和改变尺寸的无边框窗口

    2019独角兽企业重金招聘Python工程师标准>>> 实现QT无边框窗口的拖动,尺寸改变.需要的时候从该类继承,派生类需要定义为QWidget. 头文件: #ifndef SIZE ...

  4. QT实现完美无边框窗口(可拖动,可调整大小)

    效果如下: 只需定义 nativeEvent 事件即可完成这样的功能 ,但要注意的是,这是通过Windows api实现的. 样例如下:(注意头文件) framelesswidget.h #ifnde ...

  5. 【QT】自定义无边框窗口分享

    [QT/天下wu双]自定义无边框窗口分享 https://www.bilibili.com/video/BV1HA411Y7d4 源码链接:https://github.com/Bili-TianX/ ...

  6. qt 全屏窗口有边框_如何在全屏无边框窗口模式下玩任何Windows游戏

    qt 全屏窗口有边框 If you're a regular PC gamer, you know that playing a game in full screen mode can someti ...

  7. 火山PC无边框窗口尺寸的调整方法教程

    一.配置模块 右键配置模块,勾选"火山模块" 二.窗口布局 三.窗口事件 四.标签事件 五.演示 例子下载:点击本链接

  8. qt2-无边框窗口创建、拖拽、阴影

    文章目录 创建 widget 工程 main.cpp 设置无边框窗口 窗口的拖拽 窗口移动总结反思 阴影效果 关于ui的一点思考 创建 widget 工程 注意这里选择 QWidget 基类即可. 类 ...

  9. QT 创建一个 可移动、可拉伸的无边框窗体

    在使用QT创建窗体的时候,为了使窗口美化,通常不使用QT自带的边框.会调用下面函数去除窗体边框. setWindowFlags(Qt::FramelessWindowHint) 但是有个问题,当去除了 ...

最新文章

  1. java 位掩码_Java位掩码控制权限与()或(|)非(~)、的介绍
  2. 关于VC向导生成的COM的注册与反注册
  3. Java基础学习总结(28)——Java对各种排序算法的实现
  4. ITK:将不断变化的密集2D水平集可视化为高程图
  5. ORA-12170:TNS:连接超时
  6. linux网络编程之sockaddr_in和in_addr区别
  7. sap commit rollback
  8. C语言的面向对象设计 —— 对 X264/FFMPEG 架构探讨
  9. python3 鼠标定位输入及其点击实例
  10. matlab有shapely包吗,[哈工大]Modelarts NPU 安装shapely包失败
  11. GifCam v7.0 极简GIF动画录制工具中文单文件版
  12. 计算机转换汉子英语,电脑打字英文怎么转换中文
  13. 【火灾疏散建模】基于MATLAB的火灾人员疏散建模编程和仿真分析
  14. Excel之分类汇总,定位,组合
  15. 【读书笔记 | 自动驾驶中的雷达信号处理(第4章 雷达波形及其数学模型)】
  16. 系统集成项目管理工程师(中级)
  17. VMware系统启动假死,一直处于“繁忙”状态
  18. 本地推送jar包到远程maven仓库
  19. (业务)自动生成邀请码
  20. 「MoreThanJava」计算机发展史—从织布机到IBM

热门文章

  1. IBinder, BBinder和BpBinder
  2. 材质常用节点以及用法
  3. 高一学生计算机学情分析,高一学生学情分析——李涛
  4. 16级C++课程设计 第二题
  5. 计算机基础c语言试题,计算机应用基础C语言测试题.doc-资源下载在线文库www.lddoc.cn...
  6. LeetCode Line x: Char x: runtime error: member access within null pointer of type ‘struct ListNode
  7. WebGame方案汇总
  8. 1342. 将数字变成 0 的操作次数 / 1507. 转变日期格式
  9. linux选哪个显卡,常用linux系统,最好选用哪种显卡?
  10. 弘辽科技:淘宝怎么包邮?如何设置?