【QT学习】如何绘制圆角窗口?

news/2024/5/21 16:39:13/文章来源:https://blog.csdn.net/qq_59134387/article/details/127165682

文章目录

  • 前言
  • 一、实现效果
  • 二、基础知识
    • 1.QBitmap类
    • 2.QPainter类
    • 3.setMask函数
  • 三、实现代码
  • 总结


前言

   在使用QT创建窗口时,所创建出来的默认窗口都是矩形的。当我们隐藏默认标题栏,想自己绘制自定义的标题栏时,就会发现矩形的窗口过于棱角分明。本篇,作者将分享如何绘制一个圆角窗口,摆脱矩形窗口所带来的突兀感。


一、实现效果

  • 作者使用该方法,绘制了一个圆角注册界面的雏形,如下图所示。

在这里插入图片描述

二、基础知识

1.QBitmap类

(1)QBitmap表示一种只有黑白的单色图片,即位图。由于色深小,只占用很少的存储空间,适合做笔刷。

(2)QBitmap类常用API函数如下所示:

  • 构造一个给定大小的位图
	QBitmap(const QSize &size);		
  • 清除位图,将其所有位设置为 Qt::color0
	void clear();
  • QBitmap类继承QPixmap类的方法,返回一个像素矩形图片
	QRect rect() const;
  • QBitmap类继承QPixmap类的方法,填充某种颜色到图片中,默认为白色
	void fill(const QColor &color = Qt::white);

2.QPainter类

(1)在Qt绘图系统中,由QPainter来完成绘制操作。具体过程:创建QPainter;图形的绘制;销毁QPainter。

(2)QPainter类常用API函数如下所示:

  • QPainter构造函数,device指定绘图对象(设备),device可以是一个窗口或一张图片
	QPainter(QPaintDevice *device);
  • 设置画笔函数,指定图案的轮廓样式
    //使用画笔,设置画笔的风格QPen pen(Qt::red,6);painter.setPen(pen);//若绘制无轮廓图案(只有填充颜色),可以设置QPainter为Qt::NoPenpainter.setPen(Qt::NoPen);
  • 设置画刷函数,指定图案的填充样式
    // 创建画刷,设置画刷的颜色QBrush brush(Qt::black);// 使用画刷painter.setBrush(brush);
  • 绘制圆角矩形函数
	QPainter::drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius);

3.setMask函数

  • 窗口的图形遮罩功能,用于某些场合下需要制作非规则图形显示
	void QWidget::setMask(const QBitmap &bitmap);

以上方式是用位图实现的遮罩,当位图的像素为1时,遮挡部位才可见。

三、实现代码

  • 掌握了以上基本知识后,我们就可以开始实现圆角窗口的绘制,具体代码如下所示。
regscreen::regscreen(QWidget *parent) : QWidget(parent)
{//设置登录窗口大小this->setFixedSize(360,640);//创建与窗口等大的位图QBitmap bmp(this->size());    //创建的位图填充为白色           		bmp.fill();     //将图片添加为绘制对象                           		QPainter painter(&bmp); //不使用画笔的线条绘制                    	painter.setPen(Qt::NoPen);//使用黑色画刷进行绘制                  	painter.setBrush(Qt::black);       //绘制圆角矩形,圆角半径40         	painter.drawRoundedRect(bmp.rect(),40,40);  	//使用圆角矩形位图对窗户实现遮罩(即圆角窗口)this->setMask(bmp);	
}							

总结

   以上就是【QT学习】如何绘制圆角窗口的所有内容,希望大家阅读后都能有所收获!原创不易,转载请标明出处,若文章出现有误之处,欢迎读者留言指正批评!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_18620.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加深印象篇之Servlet

环境配置 需要配置web.xml文件,如图所示: userServlet:是指那个继承自HttpServlet的.java文件的名称 index.jsp:是指那个随意一个.jsp文件名称即可 要使用到Servlet相关类,需要提前将相关导包导入到pom.xml文件中 相关文件的编写 1、JDBCUtils.java文件(存储连接数据库的…

(附源码)计算机毕业设计ssm大数据学院图书管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

web前端面试题附答案016-怎么让顶部轮播图渲染的更快?

一、为什么强调轮播图? 很多时候我们强调用户体验,而这里更多时候我们更强调完美的首屏体验,而现在几乎每个网站顶部第一个大模块就是轮播图。轮播图占得区域最大,图片质量也更高,几乎一张图片的面积,体积就…

【C语言】结构体字节对齐

目录 前言 一、什么是字节对齐? 二、结构体字节对齐 三、#pragma pack()的使用 总结 结语 封面 前言 本教程可能会用到一点汇编的知识,看不懂没关系,知道是那个意思就行了。使用的工具是vs2010。 一、什么是字节对齐? 字节…

【易购管理系统】商品列表

我们来写一下商品管理界面 在Goods.vue中 <template><div><!-- 1.搜索区域 --><div class"header"></div><!-- 2.表格区域展示视图数据 --><div class"wrapper"></div><!-- 3.分页 --></div&g…

数据分析3-pandas

文章目录pandaspandas常用数据类型1.Series的创建pandas读取外部数据pandas读取数据库DataFrame基础字典列表排序索引loc与iloc字符串离散化数据的合并pandas pandas常用数据类型 Series一维数据&#xff0c;带标签数组 DataFrame 二维&#xff0c;Series容器 import pandas …

【ElasticSearch】(分组统计,自动补全,数据同步)

分组统计&#xff0c;自动补全&#xff0c;数据同步1.分组统计1-1.聚合为桶1-2.桶内度量2.RestAPI结果条件过滤数据同步安装MQ声明交换机、队列发送MQ消息接收MQ消息搭建集群修改系统配置集群状态监控1.分组统计 桶(bucket): 桶的作用&#xff0c;是按照某种方式对数据进行分…

关苏哲-洞察问题本质,解决工作难题

高效管理者的三大技能 问题界定的6个问题 1.你所需要解决的问题是什么&#xff1f; 2.你为什么需要解决这个问题&#xff1f; 3.你期待的理想结果是什么&#xff1f; 4.这个问题包括哪些子问题&#xff1f; 5.你曾经尝试过哪些解决方式&#xff1f;其他人呢&#xff1f; 6.这个…

(机器学习-深度学习快速入门)第二章数据分析基本工具正则表达式

文章目录一&#xff1a;说明二&#xff1a;正则表达式学习建议三&#xff1a;Python正则表达式简要说明&#xff08;1&#xff09;基本匹配&#xff08;2&#xff09;元字符①&#xff1a;.号②&#xff1a;字符集③&#xff1a;重复次数④&#xff1a;{}号⑤&#xff1a;(...)…

Spring(二)- 工厂高级

八&#xff1a;控制Spring工厂创建对象的次数 为什么要控制对象创建的次数 &#xff1f; 好处&#xff1a;节省不必要的内存浪费 &#xff01; 九&#xff1a;对象的生命周期 1.什么是对象的生命周期 指的是一个对象创建&#xff0c;存活&#xff0c;消亡的一个完整过程 2.…

基于朴素贝叶斯算法对肿瘤类别分类

目录 朴素贝叶斯算法​编辑 朴素贝叶斯的三种方式 实战——肿瘤类别的分类 朴素贝叶斯算法 贝叶斯定理 贝叶斯定理&#xff08;Bayes Theorem&#xff09;也称贝叶斯公式&#xff0c;是关于随机 事件的条件概率的定理 定理内容&#xff1a; 如果随机事件A1 ,A2 ,...,An构成…

【177】Java利用JNI调用C++编写的DLL,连接海康人脸抓拍机,实现人脸库全量更新。

C开发环境&#xff1a;Visual Studio 2022、windows10 Java开发环境&#xff1a;Java8、idea、windows10 这个DLL功能&#xff0c;是输入一个设备IP&#xff0c;删除设备中的所有以前的人员资料&#xff0c;然后用文件夹中XML和图片的新人脸库资料上传到设备的人脸库中。相当于…

【MySql】常用语法及例题

文章目录字符串处理函数/正则rlikegroup_concat组合查询 & 指定选取union all字符串处理函数/正则 rlike 在MySQL中&#xff0c;RLIKE运算符用于确定字符串是否匹配正则表达式。它是REGEXP_LIKE()的同义词。 如果字符串与提供的正则表达式匹配&#xff0c;则结果为1&…

【网安神器篇】——WPScan漏洞扫描工具

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;对于计算机的学习者来说&#xff0c;初期的学习无疑是最迷茫和难以坚持的&#xff0c;中后期主要是经验和能力的提高&#xff0c;我也刚接触计算机1年&#xff0c;也在不断的探索&#xf…

理解递归与循环

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Matlab论文插图绘制模板第52期—三维分簇散点图(Swarmchart3)

在之前的文章中&#xff0c;分享了Matlab分簇散点图的绘制模板&#xff1a; 抖动控制的分簇散点图&#xff1a; 这一次&#xff0c;再来分享一下三维分簇散点图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;Matlab论文插图绘制模板系列&#xff0c;旨在降低大家使用…

Oracle SQL 执行计划

解释计划 语句EXPLAIN PLAN 用来显示优化器为SQL语句选择的执行计划。将估计的信息称为解释计划输出&#xff0c;把实际信息称为执行计划输出。以此区分实际的和预期的执行计划。 使用解释计划 当使用EXPLAIN来为查询生成预期的执行计划时&#xff0c;输出将包括以下几种&…

win10开机黑屏不显示桌面,怎么办

喜欢尝鲜的小伙伴给电脑安装上ghost win10系统&#xff0c;开机发现一直黑屏&#xff0c;总是进不去桌面&#xff0c;但是鼠标却又可以动&#xff0c;关机重启好几次还是一样。 为什么总会这样&#xff1f;可能是启动系统时&#xff0c;加载explorer.exe这个软件时出现异常或是…

什么软件可以让照片动起来?快把这些软件收好

相信有不少小伙伴都有拍过照片吧&#xff0c;每次翻阅以前的照片时&#xff0c;会不会回想起以前拍照时的种种画面场景呢&#xff1f;如果你们想要让这个照片更加生动形象的话&#xff0c;我们还可以把它做成动态的照片&#xff0c;只需要使用一些软件的功能即可。那你们知道怎…

✎Qt-doc—QGraphics图形视图框架坐标系统

目录图形视图框架(Graphics View Framework)图形视图体系结构(The Graphics View Architecture)场景(The Scene)视图(The View)项(The Item)“图形视图框架”包含的类(Classes in the Graphics View Framework)“图形视图”坐标系统(The Graphics View Coordinate System)项坐标…