#include "ui_maindialog.h"
#include "maindialog.h"
#include <QState>
#include <QEventTransition>
#include <QStateMachine>
#include <qDebug>
MainDialog::MainDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MainDialog)
{
ui->setupUi(this);
setWindowFlags(Qt::WindowStaysOnTopHint);
/*遍歷界面上所有button*/
QList<QPushButton *> button = this->findChildren<QPushButton *>();
qDebug() << button.count();
for(int i=0; i < button.count(); i++)//通過i的範圍確定需要設置哪些button
{
setDynamicImage(button.at(i));
}
}
void MainDialog::setDynamicImage(QPushButton *button)
{
/*定義兩種狀態(鼠標進入button/退出button)*/
QState *inside = new QState;
inside->assignProperty(button,"flat", "false");//設置button爲凸起
QState *outside = new QState;
outside->assignProperty(button, "flat", "true");//設置button爲平面
/*把進入、退出事件與button關聯*/
QEventTransition *enterTransition = new QEventTransition(button, QEvent::Enter);
enterTransition->setTargetState(inside);//鼠標進入button
outside->addTransition(enterTransition);//把outside狀態,連接到enterTransition變化中去
QEventTransition *leaveTransition = new QEventTransition(button, QEvent::Leave);
leaveTransition->setTargetState(outside);//鼠標退出button
inside->addTransition(leaveTransition);//把inside狀態,連接到leaveTransition變化中去
/*定義狀態機*/
QStateMachine *machine = new QStateMachine(this);
/*在狀態機中添加這兩種狀態*/
machine->addState(inside);
machine->addState(outside);
/*設置初始狀態*/
machine->setInitialState(outside);
/*啓動狀態機*/
machine->start();
}
MainDialog::~MainDialog()
{
delete ui;
}