Qt圖元,場景,檢視,狀態機,狀態轉移,動畫設定等的示列(備忘)
轉自:http://blog.csdn.net/sprintfwater/article/details/8734991
SpringWater(GHQ)
//定義場景
QGraphicsScene scene(-350, -350, 700, 700);//定義圖元
Pixmap *item = new Pixmap(kineticPix);
item->setOffset(-kineticPix.width()/2, -kineticPix.height()/2);
//將圖元載入到場景中
scene.addItem(item);
//定義頂層控制元件,只要將父控制元件定義為此控制元件,則當父控制元件加入某場景,所有孩子都隨之加入
QGraphicsItem *buttonParent = new QGraphicsRectItem;
//定義狀態轉移觸發按鍵
Button *ellipseButton = new Button(QPixmap(":/images/ellipse.png"), buttonParent);
Button *figure8Button = new Button(QPixmap(":/images/figure8.png"), buttonParent);
//定義按鍵位置屬性
ellipseButton->setPos(-100, -100);
figure8Button->setPos(100, -100);
//講父控制元件加入該場景
scene.addItem(buttonParent);
定義該父控制元件在場景中的縮比例,位置,透明度的值
buttonParent->scale(0.75,0.75);
buttonParent->setPos(200, 200);
buttonParent->setZValue(65);
//定義父親狀態,只要將父狀態定義為此狀態,則當父狀態加入某狀態機,所有孩子狀態都隨之加入
QState *rootState = new QState;
//定義孩子狀態
QState *ellipseState = new QState(rootState);
QState *figure8State = new QState(rootState);
//為孩子狀態,賦予圖元,併為該圖元定義位置屬性,即當狀態為該狀態時,該圖元在在場景中的位置,就變為該狀態定義的位置
ellipseState->assignProperty(item, "pos", QPointF(cos((i / 63.0) * 6.28) * 250, sin((i / 63.0) * 6.28) * 250));
figure8State->assignProperty(item, "pos", QPointF(sin((i / 63.0) * 6.28) * 250, sin(((i * 2)/63.0) * 6.28) * 250));
// Ui
//場景需要檢視來展現在螢幕上
View *view = new View(&scene);
view->setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Animated Tiles"));
view->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
//定義試圖的背景畫刷圖片
view->setBackgroundBrush(bgPix);
view->setCacheMode(QGraphicsView::CacheBackground);
view->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
#ifdef Q_OS_SYMBIAN
view->showMaximized();
#else
view->show();
#endif
//定義狀態機,將rootState加入該狀態機,隨之他的孩子狀態都加入了該狀態機。
QStateMachine states;
states.addState(rootState);
//定義狀態機的初始狀態為根狀態
states.setInitialState(rootState);
//從隨根狀態進入狀態機的所有狀態選一個狀態作為初始狀態
rootState->setInitialState( figure8State);
//為圖元的狀態過渡變化這個動作定義一個動畫屬性
QParallelAnimationGroup *group = new QParallelAnimationGroup;
//為該狀態的位置屬性定義一個動畫
QPropertyAnimation *anim = new QPropertyAnimation(item, "pos");
//設定該動作變化的持續時間
anim->setDuration(750 + i * 25);
//設定改動作的變化速度曲線
anim->setEasingCurve(QEasingCurve::InOutBack);
//講設定好的位置變化屬性新增到動畫中
group->addAnimation(anim);
//獲得在根狀態下的按鍵觸發狀態轉移對映,和該轉移動作的控制程式碼指標
QAbstractTransition *trans = rootState->addTransition(ellipseButton, SIGNAL(pressed()), ellipseState);
//講該動作賦予前面一定定義好的動畫過程
trans->addAnimation(group);
trans = rootState->addTransition(figure8Button, SIGNAL(pressed()), figure8State);
trans->addAnimation(group);
//為動畫從初始設定的狀態rootstate在125毫秒之後就跳轉到ellipseState狀態設定一個timer觸發事件
QTimer timer;
timer.start(125);
//表示只觸發一次,而不是迴圈沒125觸發一次
timer.setSingleShot(true);
trans = rootState->addTransition(&timer, SIGNAL(timeout()), ellipseState);
trans->addAnimation(group);
//啟動狀態機器
states.start();
相關文章
- iOS 狀態列的圖示iOS
- 八、Qt Creator實現狀態列顯示QT
- 1、[ swift ] 狀態列設定Swift
- 設定沉浸式狀態列
- 如何設定微軟拼音狀態條上的圖示微軟
- MUI——設定沉浸式狀態列UI
- Qt 狀態列消除白色豎線QT
- 系統狀態檢視工具systat(轉)
- IOS設定狀態列的背景顏色iOS
- KMP+狀態轉移KMP
- 使用MegaCli工具檢視Raid磁碟陣列狀態[主站備]AI陣列
- 直播app原始碼,狀態列和導航欄設定成透明狀態APP原始碼
- win10狀態列網速工具如何顯示_win10狀態列實時顯示網速怎麼設定Win10
- GitLab 的元件狀態檢視Gitlab元件
- 【主機】檢視伺服器埠狀態伺服器
- iOS狀態列和導航欄的設定iOS
- 檢視BW執行狀態
- 檢視看防火牆狀態防火牆
- 狀態機設計
- 偏向鎖狀態轉移原理
- 電商交易場景狀態機方案探索及應用
- Linux下用netstat檢視網路狀態、埠狀態Linux
- iOS 雙波浪動畫 – 類似淘寶個人資訊狀態列,京東金融等iOS動畫
- 檢視映象資料庫的狀態資料庫
- 轉OracleRAC管理 之 叢集狀態&資訊檢視Oracle
- 轉 OracleRAC管理 之 叢集狀態&資訊檢視Oracle
- 系統狀態檢視工具Sysstat
- firewalld:檢視版本/幫助/狀態
- 狀態機
- 前端狀態管理與有限狀態機前端
- android狀態列一體化(沉浸式狀態列)Android
- GPUDepthStencilState物件設定depthStencil狀態GPU物件
- 圖片設定level-list,根據不同狀態顯示不同圖片
- 32. http狀態碼 應用場景HTTP
- 在狀態列中加入BitMap (轉)
- JS特效之狀態列冒泡 (轉)JS特效
- mysql檢視主從同步狀態的方法MySql主從同步
- 檢視使用 MySQL Shell 的連線狀態MySql