QT实现圆角窗口

用QT做界面开发的时候,时不时会有一些比较刁难人的样式要求,比如你需要将一个独立窗口,设置成圆角样式。

//UI文件中,对最外层窗口的样式设置
#ChooseUsbCamera{	//类名
	background-color: rgb(255, 255, 255);	//背景颜色(白色)
	border-radius: 10px;					//四角圆角的直径
	border-style:solid;						//边框样式(实线)
	border-width:2px;						//边框宽度
	border-color:rgb(213, 213, 213);		//边框颜色
}

这样,就简单做出一个圆角并且带有边框的界面效果,比较的美观。
QT实现圆角窗口_第1张图片
然而那么问题来了,虽然设置成圆角之后,但四个顶角的透明化无法实现,这自然而然会在窗口初始化的时候加入透明化的代码:

setAttribute(Qt::WA_TranslucentBackground);

但是却变成窗口背景的完全透明化,即便你设置了背景相关的样式
QT实现圆角窗口_第2张图片
这可能是因为透明化的设置,覆盖掉了我们自定义的样式。这个时候则需要重载paintEvent事件,重新刷图

void ChooseUsbCamera::paintEvent(QPaintEvent *event)
{
    QStyleOption opt;
    opt.init(this);
    QPainter painter(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
}

于是,终于实现了这个简单但令人头疼的圆角窗口效果:
QT实现圆角窗口_第3张图片
可以看到,它的四个角是透明的,实现了圆角的效果。而且还有一点点灰色的边框效果,虽然不是很明显hh。
其实如果你是窗口内的部件,用同样的方法设置样式,或者直接填充带有透明度的图片,是不需要这么麻烦的。但顶层的窗口设置起来往往就不行,研究了半天还走了不少弯路hh,所以特意记录一下。

你可能感兴趣的:(qt,开发语言,c++,ui)