Qt文档阅读笔记-windowOpacity官方解析及实例(两种方法使得程序渐变出现)
目录
官方解析
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);
}