一、前言
特殊形况需求不规则界面,需要做如下方式处理
二、环境
qt5.7
window10
linux3.10
三、正文
效果:
方法:此方法在linux中和window中均无问题,稳定可靠,通用方法,其他方法只支持window平台
1.首先搞一个不规则形状的带透明的png背景图片,然后在ui的qss中给空间添加以下样式表
#mainform{
border-image: url(:/icon/background.png);
}
具体根据自己的资源名称和路径,这里添加不添加都可以,添加是为了在ui设计时方便观看效果,不添加在程序运行也一样。
2.头文件中加入
#include <QPixmap>
#include <QPaintEvent>
#include <QPainter>
私有成员变量加入
protected:
void paintEvent(QPaintEvent *paintevent);
private:
Ui::mainform *ui;
QPixmap pic;
3.程序中加入
初始化
this->setWindowFlags(Qt::FramelessWindowHint);//窗口无边框
this->setAttribute(Qt::WA_TranslucentBackground);//设置背景透明
pic.load(":/icon/background.png");//设置背景
函数
//重绘界面,使界面带圆角
void mainform::paintEvent(QPaintEvent *paintevent)
{
paintevent->ignore();
QPainter painter(this);
painter.drawPixmap(0,0,pic);//绘制图像
}
完毕,点击透明位置相当于点击上一界面,不会虚假占用空间
四、结语
over