1. 程式人生 > >Qt文件閱讀筆記-windowOpacity官方解析及例項(兩種方法使得程式漸變出現)

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);
}