Qt文档阅读笔记-windowOpacity官方解析及实例(两种方法使得程序渐变出现)

583 篇文章 127 订阅
196 篇文章 13 订阅

目录

官方解析

博主例子


官方解析

windowOpacity

这个属性控制窗口的透明度。
他的取值范围是1.0(不透明)至0.0(全透明)。
默认情况下,这个属性的值是1.0。
这个属性在Linux,OS X,Windows,以及X11平台都支持。
但这个属性在Windows CE是不支持的。

注意到,在X11平台上需要正在运行的组合管理器,并且X11中_NET_WM_WINDOW_OPACITY这一项需要被用户正在使用的窗口所支持。

注意:
将不透明改变为透明时,这个在某些时候对应paint event是有影响的,主要影响QPixmap::grabWindow()这个函数以及对窗口大小的调整
 

 

博主例子

两种方式效果都一样!!!!但运用的机制却不同

运行截图如下:

源码如下:

利用QPropertyAnimation

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
   Q_OBJECT

public:
   explicit Widget(QWidget *parent = 0);
   ~Widget();

private:
   Ui::Widget *ui;
};

#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   Widget w;
   w.show();

   return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include <QDebug>
#include <QPropertyAnimation>


Widget::Widget(QWidget *parent) :
   QWidget(parent),
   ui(new Ui::Widget)
{
   ui->setupUi(this);

   QPropertyAnimation *m_Animation=new QPropertyAnimation(this,"windowOpacity");
   m_Animation->setDuration(8000);
   m_Animation->setStartValue(0.1);
   m_Animation->setEndValue(1.0);
   m_Animation->start();


}

Widget::~Widget()
{
   delete ui;
}

利用QTimeLine

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
class QTimeLine;
QT_END_NAMESPACE

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

protected slots:
    void setWindowsOpacityValue(const qreal value);

private:
    Ui::Widget *ui;

    QTimeLine *m_timeLine;
};

#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include <QTimeLine>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    m_timeLine=new QTimeLine;
    setWindowOpacity(0.0);  //must be called solely.
    m_timeLine->setDuration(5000);
    m_timeLine->setFrameRange(0,1);
    connect(m_timeLine,SIGNAL(valueChanged(qreal)),this,SLOT(setWindowsOpacityValue(qreal)));
    m_timeLine->start();
}

Widget::~Widget()
{
    delete ui;
    delete m_timeLine;
}

void Widget::setWindowsOpacityValue(const qreal value)
{
    this->setWindowOpacity(value);
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值