Qt文件閱讀筆記-windowOpacity官方解析及例項(兩種方法使得程式漸變出現)
阿新 • • 發佈:2018-12-12
目錄
官方解析
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);
}