
Qt理论上能很容易的实现圆角
窗口,但不知道
Nokia为什么不去做。
如上图的圆角效果看上去很完美,这个圆角是使用mask + stylesheet来实现的,实现的方式非常另类。
1. mask为1x1的图片
2. 主窗口随便使用一个QWidget,在上面设置Mask
3. 添加一个
QLineEdit到此
widget里,设置此QLineEdit的水平和垂直 size policy 都为expanding,并为它使用style sheet设置圆角:
border: 2px dashed black;
border-radius: 10px;
4. 然后所有的组件都添加到这个QLineEdit里即可,自由的使用QLayout布局所有的子组件。
5.
显示主窗口即可以看到图中的效果。
思考:
使用Mask的时候,如QLineEdit,QPushButton, QTextEdit等可以显示出来。
但如QFrame,QWidget,
QLabel却完全是透明的,即使设置setAutoFillBackground(true)也不行,设置了palette的Base, Window等角色都还是不行。
不过却可以说明,如果QWidget绘制不透明背景使用如QLineEdit的方式,那么就可以很容易的使用QWidget来实现圆角窗口了,只要设置一下style sheet就能实现。
1. 不使用QLineEdit等来作为窗口容器,是因为不能在
Designer里直接往他们内部放组件
2. 上面的实现中,QLineEdit的子组件如QLabel还是不能绘制出背景,只有QPushButton等可以。
至少通过上面的例子,可以知道Qt从理论上来说可以很方便的实现圆角窗口,而且圆角只需要使用style sheet就能实现。
可是,如此简单的方式,Nokia至少现在还
没有提供。