設置QPushButton的平面與突出(遍歷控件)

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章