Qt实战案例(14)——利用Qt设置特殊效果窗体

目录

    • 一、透明窗体
      • 1.1 方法1
      • 1.2 方法2
    • 二、无边框窗体

一、透明窗体

实现窗体内容部件的透明效果只需设置其背景色的rgba即可,代码如下:

QPushButton{background-color:rgba(255,255,255,100)}

其中,rgba中的a就是指alpha,它的取值是0~255,取值为0表示完全透明,取值为255表示完全不透明。这里a设置为100表示半透明效果。

部件的透明效果可以通过上述方式来设置,但是窗体无法通过上述方式设置,但是可以通过两种方法设置。

1.1 方法1

代码如下:

    //设置窗体的不透明度为0.5
    setWindowOpacity(0.5);

使用setWindowOpacity函数可以实现窗口的透明效果,它的参数u取值范围为0.0~1.0,0.0表示完全透明,1.0表示完全不透明,程序运行效果如下:
Qt实战案例(14)——利用Qt设置特殊效果窗体_第1张图片
可以发现整个应用程序界面都是半透明的。

如果不想让部件透明可以使用第二种方法。

1.2 方法2

将方法1的代码注释,添加如下两行代码:

    setWindowFlags(Qt::FramelessWindowHint);
    setAttribute(Qt::WA_TranslucentBackground);

这里使用了setAttribute()函数指定窗口的Qt:: WA_TranslucentBackground属性,它可以使窗体背景透明,而其中的部件不受影响。不过在Windows下还要使用setWindowFlags()函数指定Qt::FramelessWindowHint标志,这样才能实现透明效果。运行程序如下:
Qt实战案例(14)——利用Qt设置特殊效果窗体_第2张图片
可以发现,窗口没有了标题栏,这时要想关闭窗口,就要使用Qt Creator应用程序输出栏上的红色按钮来强行关闭程序。这样实现的效果背景完全透明的,要是还想实现半透明效果,可以使用重绘事件。

1.首先在头文件中声明paintEvent()函数:

protected:
    void paintEvent(QPaintEvent *);

2.然后在主程序中添加paintEvent()函数的定义:

#include
void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.fillRect(rect(),QColor(255,255,255,200));

}

这里先使用rect()函数获取窗口内部的矩形,它不包含任何边框,然后使用半透明的白色对这个矩形进行填充,可以运行程序查看其效果:
Qt实战案例(14)——利用Qt设置特殊效果窗体_第3张图片
fillRect()函数可以指定任何一个区域,所以可以实现窗体的部分区域全部透明,部分区域半透明或不透明。
但是,它没有标题栏和边框,还需要手动为其添加。

二、无边框窗体

自定义无边框窗口时,需要将窗口标志设为:

Qt::FramelessWindowHint |Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint

ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~

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