#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;
}
http://blog.csdn.net/mingxia_sui/article/details/7760163
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2015-06-02 发现一个好的开源项目:lomoX(挑着看,每天看一点,看一年就ok了)——用Webkit开发桌面软件,炫