窗口标志设置函数(Qt :: WindowFlags)
窗口标志是一个类型(例如Qt :: Dialog)和零个或多个提示窗口系统(hints)(例如Qt :: FramelessWindowHint)的组合。 标志Qt :: WindowFlags(具体标志讲解见帮助文档Qt :: WindowFlags)
推荐好网站:http://doc.qt.io/archives/qt-5.5/
利用浏览器翻译插件,帮助快速学习
不规则窗体
Qt中提供了部件遮罩(mask)来实现不规则窗体。例如: 先在构造函数中添加如下代码:
QPixmap pix;
pix.load(":/image/yafeilinux.png"); // 加载图片
resize(pix.size()); // 设置窗口大小为图片大小
setMask(pix.mask()); // 为窗口设置遮罩
然后在paintEvent()函数中将图片绘制在窗口上:
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
// 从窗口左上角开始绘制图片
painter.drawPixmap(0,0,QPixmap(":/image/yafeilinux.png"));
}
透明窗体
利用样式表设置部件的透明度,QPushButton { background 一color,rgba(255, 255, 255, 100) },但这种方式不能用于顶层窗口 setWindowOpacity(double X)设置窗口的透明度,整个应用程序全部透明,
- 该属性保持窗口的不透明度。
- 不透明度的有效范围是从1.0(完全不透明)到0.0(完全透明)。
- 默认情况下,这个属性的值是1.0。
setWindowFlags(Qt, FramelessWindowHint)和setAttribute( Qt: : WA_TranslucentBackground) 组合使用,实现窗体背景透明,部件不透明。
方式一:使用setWindowOpacity()函数。例如: 构造函数里添加一行代码:
setWindowOpacity(0.3);
使用setWindowOpacity()函数就可以实现窗口的透明效果,它的参数取值范围为0.0-1.0,当取值为0.0时完全透明,取值为1.0时完全不透明。
方式二:使用setAttribute()函数。例如: 在构造函数中下面两行代码:
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground);
这里使用了setAttribute()函数指定窗口的Qt::WA_TranslucentBackground属性,它可以使窗体背景透明,而其中的部件不受影响。不过在Windows下,还要使用setWindowFlags()函数指定Qt::FramelessWindowHint标志,这样才能实现透明效果。
方式三:在方式二的基础上修改重绘事件。例如: 进行paintEvent()函数的定义:
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.fillRect(rect(),QColor(255,255,255,100));
}
这里先使用rect()函数获取窗口的内部矩形,它不包含任何边框。然后使用半透明的白色对这个矩形进行填充。