参考文献:《Qt Creator 快速入门》第三版 霍亚飞编著
一、不规则窗体
qt中提供了部件遮盖mask来实现不规则窗体。下面例子给窗口设置遮盖。
创建基于Qt Widgets的应用,取名mymask。向项目中添加资源文件resouce,向资源文件中添加图片文件bg.png。如下图
在构造函数里添加以下代码
QPixmap pix;
//加载图片
pix.load(":/image/bg.png");
//设置窗口大小为图片大小
resize(pix.size());
//为窗口设置遮掩
setMask(pix.mask());
widget.h头文件里声明两个事件处理函数
protected:
void paintEvent(QPaintEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
并在cpp中实现函数
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
//从窗口左上角开始绘制图片
painter.drawPixmap(0,0,QPixmap(":/image/bg.png"));
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
//关闭窗口
close();
}
效果如下
二、实现阴影效果和透明度效果
使用QGraphicsDropShadowEffect实现阴影效果。
使用QGraphicsOpacityEffect实现透明效果。
创建widget项目,ui文件中拖入label,内容改为“Drop shadow test”。再拖入一个label,内容改为“Opacity”。在构造函数中加入以下代码,给label加阴影效果,给label_2实现半透明效果。
//创建阴影效果
QGraphicsDropShadowEffect* effect=new QGraphicsDropShadowEffect;
//设置阴影颜色
effect->setColor(QColor(100,100,100,100));
//设置阴影模糊半径发
effect->setBlurRadius(2);
//设置阴影偏移值
effect->setOffset(10);
//标签部分使用阴影效果
ui->label->setGraphicsEffect(effect);
//创建透明效果
QGraphicsOpacityEffect* effect1=new QGraphicsOpacityEffect;
//设置透明度
effect1->setOpacity(0.5);
//标签2使用透明效果
ui->label_2->setGraphicsEffect(effect1);
效果如下