项目要求:设置一个按钮和一个LABEL,按下按钮LABEL状态发生变化,再按下LABEL状态又发生变化。
源码地址:http://pan.baidu.com/s/1qWDFGHQ
本实验在Qt中图片调用(1)的基础上做修改。
1. 添加灯状态变量,信号,和槽函数,mywidget.h修改如下:
1 class MyWidget : public QWidget 2 { 3 Q_OBJECT 4 5 public: 6 explicit MyWidget(QWidget *parent = 0); 7 ~MyWidget(); 8 9 private: 10 Ui::MyWidget *ui; 11 int state_lamp; //灯状态变量 12 //添加信号定义 13 signals: 14 void lamp_signal();//signals 15 private slots: 16 void lamp(); //slots 17 void on_pushButton_clicked(); 18 };
2. 在构造函数中创建信号与槽函数的连接,然后在按钮单击函数中发射信号。mywidget.cpp修改如下:
1 #include "mywidget.h" 2 #include "ui_mywidget.h" 3 #include <QTextCodec> 4 5 MyWidget::MyWidget(QWidget *parent) : 6 QWidget(parent), 7 ui(new Ui::MyWidget) 8 { 9 ui->setupUi(this); 10 ui->label->setPixmap(QPixmap(":/close.jpg")); 11 ui->pushButton->setText("open"); 12 state_lamp = 0;//初始化lamp的状态 13 connect(this,SIGNAL(lamp_signal()),this,SLOT(lamp()));//将槽与信号连接 14 15 } 16 17 MyWidget::~MyWidget() 18 { 19 delete ui; 20 } 21 22 void MyWidget::on_pushButton_clicked() 23 { 24 emit lamp_signal(); //发射信号 25 } 26 27 void MyWidget::lamp() //槽函数 28 { 29 state_lamp = ~state_lamp; 30 if(state_lamp) 31 { 32 ui->label->setPixmap(QPixmap(":/open.jpg")); 33 ui->pushButton->setText("close"); 34 } 35 else 36 { 37 ui->label->setPixmap(QPixmap(":/close.jpg")); 38 ui->pushButton->setText("open"); 39 } 40 }
3. ui界面修改如下:
4.运行结果如下:点击“open”按钮,图片变为红色且按钮变成“close”状态,再点击“close”按钮,图片又变为灰色。