Qt開發筆記 動畫

2021-07-22 09:07:00 字數 3527 閱讀 1235

1. qt中的動畫效果可以通過qpropertyanimation類來實現,這個類通過設定動畫作用的目標settargetobject,動畫效果屬性setpropertyname,以及設定動畫開始setstartvalue和結束setendvalue位置來定義乙個動畫,並通過呼叫start來開始這個動畫;

addanimation來新增動畫,呼叫addpause來新增乙個暫停效果;

3. 左右切換時,會出現新動畫覆蓋舊動畫的效果,可以通過對舊控制項隱藏來實現。

4. qframe類是有框架的視窗部件的基類。

它繪製框架並且呼叫乙個虛函式drawcontents()來填充這個框架。這個函式是被子類重新實現的。這裡至少還有兩個有用的函式:drawframe()和framechanged()。

qpopupmenu使用這個來把選單「公升高」,高於周圍螢幕。qprogressbar有「凹陷」的外觀。qlabel有平坦的外觀。這些有框架的視窗部件可以被改變。

qlabel label(...);

label.setframestyle( qframe::panel | qframe::raised );

label.setlinewidth( 2 );

qprogressbar pbar(...);

label.setframestyle( qframe::noframe );

qframe類也能夠直接被用來建立沒有任何內容的簡單框架,儘管通常情況下,你要用到qhbox或qvbox,因為它們可以自動的布置你放到框架中的視窗部件。

框架視窗部件有四個屬性:framestyle()、linewidth()、midlinewidth()和margin()。

------framestyle由框架外形和陰影風格決定。框架外形有noframe、box、panel、styledpanel、popuppanel、winpanel、*******panel、menubarpanel、hline和vline,陰影風格有plain、raised和sunken。

------linewidth就是框架邊界的寬度。

------midlinewidth指定的是在框架中間的另外一條線的寬度,它使用第三種顏色來得到乙個三維的效果。注意中間線只有在box、hline和vline這些凸起和凹陷的框架中才被繪製。

------margin邊白就是框架和框架內容之間的間隙。

qframe繼承自qwidget類。

5. 視窗大小重繪事件:

void resizeevent(qresizeevent *event)
當且僅當介面大小發生變化時才會被呼叫,如放大視窗或呼叫resize函式。
程式**:
#ifndef animation_h

#define animation_h

#include #include #include #include #include #include #include class animationwidget : public qwidget

;#endif // animation_h

#include "animationwidget.h"

#include #include #define animation_duration 2000

#define animation_pause 1000

#define animation_timer (2*animation_duration+animation_pause+500)

animationwidget::animationwidget(qwidget *parent) : qwidget(parent)

").arg(i+1));

}nextanimation[0]->setstartvalue(qpoint(-windowssize.width(), 0));

nextanimation[0]->setendvalue(qpoint(0, 0));

nextanimation[1]->setstartvalue(qpoint(0, 0));

nextanimation[1]->setendvalue(qpoint(windowssize.width(), 0));

for (int i = 0; i < 2; ++i)

setanimationtarget(nextanimation[i], currentimage);

nextanimationgroup->addanimation(nextanimation[0]);

nextanimationgroup->addpause(animation_pause);

nextanimationgroup->addanimation(nextanimation[1]);

prevanimation[0]->setstartvalue(qpoint(windowssize.width(), 0));

prevanimation[0]->setendvalue(qpoint(0, 0));

prevanimation[1]->setstartvalue(qpoint(0, 0));

prevanimation[1]->setendvalue(qpoint(-windowssize.width(), 0));

for (int i = 0; i < 2; ++i)

setanimationtarget(prevanimation[i], currentimage);

prevanimationgroup->addanimation(prevanimation[0]);

prevanimationgroup->addpause(animation_pause);

prevanimationgroup->addanimation(prevanimation[1]);

resize(windowssize);

connect(&playanimationtimer, signal(timeout()), this, slot(nextimage()));

playanimationtimer.setinterval(animation_timer);

nextimage();

playanimationtimer.start();

}animationwidget::~animationwidget()

if (prevanimationgroup != null)

for (int i = 0; i < 2; ++i)

if (prevanimation[i] != null)

}}void animationwidget::nextimage()

}void animationwidget::previousimage()

}void animationwidget::resizeevent(qresizeevent *event)

void animationwidget::setanimationtarget(qpropertyanimation *animation, int currentimg)

qt開發筆記1

qmainwindow繼承與qwidget 當qwidget 類中介面發生變化 例如 最大 小化 時,觸發showevent 函式。類似函式還有changeevent keypressevent paintevent resizeevent 等等。qeventloop類 在任何時候,你都可以建立乙個...

Qt 的介面開發筆記

現在的工作是介面應用程式開發,以前使用c程式設計,現在需要qt 下用到c 做嵌入式介面開發,邊做專案邊總結。在總結的同時,新增例子程式,可以更好的理解理論知識。一般找到的教程是直接操作,沒有定義自己的類,在專案比較小,功能比較單一的情況下可以使用,但是不如依據個人需求重新定義類更方便快捷,qt 工程...

Qt 樹莓派開發筆記

開機自啟動遇到 qt.qpa.screen qxcbconnection could not connect to display export qt qpa platform offscreen 開機自啟qt程式 指令碼程式可以在自動啟動視窗這一步之前執行,但是使用者程式是不行。下面來看一下怎麼啟...