【QT学习】如何绘制圆角窗口?(完整源码)
文章目录
- 前言
- 一、实现效果
- 二、基础知识
- 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::NoPen
painter.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学习】如何绘制圆角窗口的所有内容,希望大家阅读后都能有所收获!原创不易,转载请标明出处,若文章出现有误之处,欢迎读者留言指正批评!