设置QPushButton的平面与突出(遍历控件)

  
  
  
  
  1. #include "ui_maindialog.h" 
  2. #include "maindialog.h" 
  3. #include <QState> 
  4. #include <QEventTransition> 
  5. #include <QStateMachine> 
  6. #include <qDebug> 
  7. MainDialog::MainDialog(QWidget *parent) : 
  8.     QDialog(parent), 
  9.     ui(new Ui::MainDialog) 
  10.     ui->setupUi(this); 
  11.     setWindowFlags(Qt::WindowStaysOnTopHint); 
  12.     /*遍历界面上所有button*/ 
  13.     QList<QPushButton *> button = this->findChildren<QPushButton *>(); 
  14.     qDebug() << button.count(); 
  15.     for(int i=0; i < button.count(); i++)//通过i的范围确定需要设置哪些button 
  16.     { 
  17.         setDynamicImage(button.at(i)); 
  18.     } 
  19. void MainDialog::setDynamicImage(QPushButton *button) 
  20.     /*定义两种状态(鼠标进入button/退出button)*/ 
  21.     QState *inside = new QState; 
  22.     inside->assignProperty(button,"flat""false");//设置button为凸起 
  23.     QState *outside = new QState; 
  24.     outside->assignProperty(button, "flat""true");//设置button为平面 
  25.     /*把进入、退出事件与button关联*/ 
  26.     QEventTransition *enterTransition = new QEventTransition(button, QEvent::Enter); 
  27.     enterTransition->setTargetState(inside);//鼠标进入button 
  28.     outside->addTransition(enterTransition);//把outside状态,连接到enterTransition变化中去 
  29.     QEventTransition *leaveTransition = new QEventTransition(button, QEvent::Leave); 
  30.     leaveTransition->setTargetState(outside);//鼠标退出button 
  31.     inside->addTransition(leaveTransition);//把inside状态,连接到leaveTransition变化中去 
  32.     /*定义状态机*/ 
  33.     QStateMachine *machine = new QStateMachine(this); 
  34.     /*在状态机中添加这两种状态*/ 
  35.     machine->addState(inside); 
  36.     machine->addState(outside); 
  37.     /*设置初始状态*/ 
  38.     machine->setInitialState(outside); 
  39.     /*启动状态机*/ 
  40.     machine->start(); 
  41. MainDialog::~MainDialog() 
  42.     delete ui; 

 

本文来源: http://blog.csdn.net/mingxia_sui/article/details/7760163

 

 

你可能感兴趣的:(QPushButton)