Qt设置窗体(QWidget)透明度的方法总结

目录
  • 1. 设置窗体的背景色
  • 2. 使用函数
  • 3. 窗口及其上面的控件都半透明
  • 4. 窗口整体不透明,局部透明
  • 5. 使用qss样式表设置窗体透明
  • 6. 设置窗体颜色渐变

1. 设置窗体的背景色

在构造函数里添加代码,需要添加头文件qpalette或qgui

QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));
setPalette(pal);

通过设置窗体的背景色来实现,将背景色设置为全透。

效果: 窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明; 窗体客户区完全透明。

2. 使用函数

setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);//去掉标题栏
setAttribute(Qt::WA_TranslucentBackground, true);//设置窗口背景透明

同样在构造函数中,效果和第一种方法相同。

3. 窗口及其上面的控件都半透明

setWindowOpacity(0.7);

这个函数可以分10个等级调整透明度,配合QSlider控件可以做成控制条 效果:窗口及控件都半透明。

自己注释:

直接设置setWindowOpacity函数应该不起作用,需要设置窗体的属性:

this->setAttribute(Qt::WA_WState_WindowOpacitySet);

4. 窗口整体不透明,局部透明

在Paint事件中使用Clear模式绘图。

void TestWindow::paintEvent( QPaintEvent* )
{
    QPainter p(this);
    p.setCompositionMode( QPainter::CompositionMode_Clear );
    p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );
}

试验效果:绘制区域全透明。如果绘制区域有控件不会影响控件。

5. 使用qss样式表设置窗体透明

QWidget* widget = new QWidget();
widget->setObjectName("wid");
widget->setStyleSheet("QWidget#wid{background-color: rgba(255,0,0,0.5);}");
widget->show();

rgba(255,255,255,1)中参数解释:

  • r【read】 表示:红色,范围:0-255,
  • g【green】表示:绿色,范围:0-255,
  • b【blue】 表示:蓝色,范围:0-255,
  • a【alpha】表示:透明度,范围:0-1,0表示全透明, 1表示不透明;

补充: 如果QWidget 的子类窗口采用setStyleSheet 设置背景色无效,需要加上setAttribute(Qt::WA_StyledBackground);

目的是脱离父窗口的样式。

6. 设置窗体颜色渐变

(1)渐变颜色设置有:qlineargradient(线性渐变颜色设置),qradialgradient(辐射渐变),qconicalgradient(圆锥形渐变)。

渐变方式 解释
QLinearGradient: 显示从起点到终点的渐变。
QRadialGradient: 以圆心为中心显示渐变
QConicalGradient: 围绕一个中心点显示渐变
QGradient::PadSpread : 填充区域内最接近的停止颜色。这是默认的
QGradient::RepeatSpread : 在区域外继续重复填充
QGradient::ReflectSpread : 在区域外反射填充

(2)渐变过程:x1->x2 从左向右渐变;y1->y2 从上向下渐变。如果只有x相等,则表示垂直线性渐变,如果只有y相等,则表示平行线性渐变,否则就是斜角线性渐变。

(3)左右渐变

QLabel#label{
                background-color: qlineargradient(x1:0, y1:0, x2:1, y2:0,
                stop:0 rgba(255,0,0,1),stop:1 rgba(0,255,0,1));
            }

效果:

(4)上下渐变

QLabel#label{
                background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
                stop:0 rgba(255,0,0,1),stop:1 rgba(0,255,0,1));
            }

效果:

(5)左右上下 渐变

QLabel#label{
                background-color: qlineargradient(x1:0, y1:0, x2:1, y2:1,
                stop:0 rgba(255,0,0,1),stop:1 rgba(0,255,0,1));
            }

效果:

(6)x1,x2,y1,y2都是设置成0或者1,颜色都一样是红色

QLabel#label{
                background-color: qlineargradient(x1:1, y1:1, x2:1, y2:1,
                stop:0 rgba(255,0,0,1),stop:1 rgba(0,255,0,1));
            }

效果:

(7)增加多个渐变点

QLabel#label{
                background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0,
                stop:0 rgba(255,0,0,1),stop:0.5 rgba(0,255,0,1),stop:1 rgba(0,0,255,1));
            }

效果:

(8)辐射渐变

以圆心为中心显示渐变。(cx, cy)是中点,半径(radius)是以中点为圆心的圆的半径,(fx, fy)是渐变的起点。

QLabel#label{
        background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5,
        stop:0 rgba(105, 105, 0, 255),
        stop:0.19397 rgba(0, 55, 55, 255),
        stop:0.202312 rgba(80, 80, 0, 255),
        stop:0.495514 rgba(0, 105, 105, 255),
        stop:0.504819 rgba(0, 188, 188, 255),
        stop:0.79 rgba(0, 195, 195, 255),
        stop:1 rgba(0, 158, 158, 255));
}

效果:

(9)圆锥形渐变

在(cx, cy)坐标上以角度(angle)为中心显示渐变。

QLabel#label{
            background-color: qconicalgradient(cx:0.5, cy:0.5, angle:0,
            stop:0 rgba(0, 255, 0, 255), stop:0.373979 rgba(0, 255, 0, 255),
            stop:0.373991 rgba(33, 30, 255, 255), stop:0.624018 rgba(33, 30, 255, 255),
            stop:0.624043 rgba(255, 0, 0, 255), stop:1 rgba(255, 0, 0, 255));
            }

效果:

以上就是Qt设置窗体(QWidget)透明度的方法总结的详细内容,更多关于Qt设置窗体透明度的资料请关注我们其它相关文章!

(0)

相关推荐

  • 在Qt中正确的设置窗体的背景图片的几种方法总结

    Qt中正确的设置窗体的背景图片的方法大致有两种,下面将逐个讲解: 一. 利用styleSheet设置窗体的背景图片 使用stylesheet设置窗体的背景图片的时候,可以直接按照下图的操作去进行即可,如下图所示: 但是,需要注意的是: 1.在QWidget中这种方法是不行的,如果你足够细心的话,你会发现使用同样的设置背景图片的方法,背景图片其实并没有发生真实改变,但是它的子窗体背景图片是会发生改变的. 其实我们可以通过在添加一个i额QWidget来解决这个问题,即在QtDesigner中添加一个

  • C/C++ Qt MdiArea 多窗体组件应用教程

    MDI多窗体组件,主要用于设计多文档界面应用程序,该组件具备有多种窗体展示风格,其实现了在父窗体中内嵌多种子窗体的功能,使用MDI组件需要在UI界面中增加mdiArea控件容器,我们所有的窗体创建与操作都在这个容器内进行,如下我们将具体介绍该组件的常用使用技巧. MDI窗体控件类似于画布,该控件只具备展示窗体的功能,无法实现生成窗体,所以我们需要在项目中手动增加自定义的Dialog对话框,并对该对话框进行一定的定制. 这个Dialog对话框我们只增加两个功能,一个Dialog::currentF

  • C/C++ Qt TabWidget 实现多窗体创建详解

    在开发窗体应用时通常会伴随分页,TabWidget组件配合自定义Dialog组件,可实现一个复杂的多窗体分页结构,此类结构也是ERP等软件通用的窗体布局方案. 首先先来实现一个只有TabWidget分页的简单结构,如下窗体布局,布局中空白部分是一个TabWidget组件,下方是一个按钮,当用户点击按钮时,自动将该窗体新增到TabWidget组件中. 该页面关联代码如下所示,当用户点击on_pushButton_clicked()时自动新增一个窗体并将窗体的Tab设置为指定的IP地址. t->se

  • Qt设置窗体(QWidget)透明度的方法总结

    目录 1. 设置窗体的背景色 2. 使用函数 3. 窗口及其上面的控件都半透明 4. 窗口整体不透明,局部透明 5. 使用qss样式表设置窗体透明 6. 设置窗体颜色渐变 1. 设置窗体的背景色 在构造函数里添加代码,需要添加头文件qpalette或qgui QPalette pal = palette(); pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); setPalette(pal); 通过设置窗体的背景色来实

  • WPF设置窗体可以使用鼠标拖动大小的方法

    本文实例讲述了WPF设置窗体可以使用鼠标拖动大小的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: private void Window_Loaded(object sender, RoutedEventArgs e) {     // 获取窗体句柄     IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle; // 获得窗体的 样式     int oldstyle = Nat

  • C#设置窗体最大化且不遮挡任务栏的方法

    本文实例讲述了C#设置窗体最大化且不遮挡任务栏的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /// <summary> /// 设置窗体最大化(不遮挡任务栏) /// </summary> /// <param name="frm"></param> public virtual void SetFormMax(Form frm) {     frm.Top = 0;     frm.Left = 0;    

  • pyqt5 设置窗体透明控件不透明的操作

    我就废话不多说了,大家还是直接看代码吧~ // 窗体透明,控件不透明 self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool) self.setAttribute(Qt.WA_TranslucentBackground) 补充:[解决问题]pyqt5设置窗体透明,而上面的控件不透明 在做软件的时候想把QWidget设置成透明的,我在网上搜了各种答案: 有说设置qss背景属性的:background: transparent; 但是这样就全透明了.

  • Qt创建并显示柱状图的方法

    创建一个简单的柱状图 第一步:创建一个QBarSet对象:QBarSet类代表条形图中的一组条形. QBarSet *set0 = new QBarSet("Jane"); QBarSet *set1 = new QBarSet("John"); QBarSet *set2 = new QBarSet("Axel"); QBarSet *set3 = new QBarSet("Mary"); QBarSet *set4 = n

  • Qt实现线程与定时器的方法

    目录 一.定时器QTimer类 二.在多线程中使用QTimer 1.错误用法 2.正确用法一 3.正确用法二 一.定时器QTimer类 The QTimer class provides repetitive and single-shot timers. The QTimer class provides a high-level programming interface for timers. To use it, create a QTimer, connect its timeout(

  • C#实现更改MDI窗体背景颜色的方法

    本文实例讲述了C#实现更改MDI窗体背景颜色的方法.分享给大家供大家参考.具体实现方法如下: /// <summary> /// 设置MDI背景 /// </summary> void RemoveMdiBackColor() { foreach (Control c in this.Controls) { if (c is MdiClient) { c.BackColor = this.BackColor; //颜色 c.BackgroundImage = this.Backgr

  • C#实现让窗体获得焦点的方法示例

    本文实例讲述了C#实现让窗体获得焦点的方法.分享给大家供大家参考,具体如下: 开发环境:Visual Studio .NET 2005 下的Windows Form Application 应用场景:当我们有个窗体中的数据发生了变化而此窗体又没有获得焦点(不是用户操作的当前窗口)的时候,我们希望它获得焦点,这样用户就可以立刻发现它上面的数据发生了变化. 新建一个Window应用程序,会建立Form1,再添加一个Timer(timer1),设置如下属性: 然后添加timer1的Tick事件函数,完

  • Android编程实现设置TabHost当中字体的方法

    本文实例讲述了Android编程设置TabHost当中字体的方法.分享给大家供大家参考,具体如下: TabWidget tw=this.getTabWidget();//设置TabHost当中的内容的方法 for(int i=0;i<tw.getChildCount();i++){ //设置TabHost字体的相关方法 TextView tv=(TextView)tw.getChildAt(i).findViewById(android.R.id.title); tv.setGravity(BI

随机推荐