可以从Qt助手搜索QEventTransition看到官方帮助文档例子
void setButtonStyle(const QString& _route){
//读取配置文件及操作见之前的博客通用读写ini文件
QIcon open_normal_icon=QIcon(_rounte+"open_normal.png");
QIcon open_hover_icon=QIcon(_rounte+"open_hover.png");
QIcon open_pressed_icon=QIcon(_rounte+"open_pressed.png");
QStateMachine *machine = new QStateMachine(this);
QState *open_normal = new QState();
QState *open_hover = new QState();
QState *open_pressed = new QState();
// 每个状态对应的改变
open_normal->assignProperty(button, "text", "Outside");
open_normal->assignProperty(button, "icon", open_normal_icon);
open_hover->assignProperty(button, "text", "Inside");
open_hover->assignProperty(button, "icon", open_hover_icon);
open_pressed->assignProperty(button, "text", "Pressing...");
open_pressed->assignProperty(button, "icon", open_pressed_icon);
//添加状态对应的过度
//从正常状态到悬浮状态(就是鼠标在按钮上)
QEventTransition *normalTransition = new QEventTransition(button, QEvent::Enter);
normalTransition->setTargetState(open_hover);//目标状态,从当前状态到对应的状态
open_normal->addTransition(normalTransition);//当前状态
//从悬浮状态到正常状态(鼠标不在按钮上)
QEventTransition *hoverTransition = new QEventTransition(button, QEvent::Leave);
hoverTransition->setTargetState(open_normal);
open_hover->addTransition(hoverTransition);
//从悬浮状态到选中状态(鼠标点击事件)
QEventTransition *pressTransition = new QEventTransition(button, QEvent::MouseButtonPress);
pressTransition->setTargetState(open_pressed);
open_hover->addTransition(pressTransition);
//从选中状态到悬浮状态(鼠标点击释放事件)
QEventTransition *releaseTransition = new QEventTransition(button, QEvent::MouseButtonRelease);
releaseTransition->setTargetState(open_hover);
open_pressed->addTransition(releaseTransition);
//添加状态
machine->addState(open_normal);
machine->addState(open_hover);
machine->addState(open_pressed);
//初始化状态
machine->setInitialState(open_normal);
//开启状态机服务
machine->start();
}