第6篇 Qt实现十字路口交通灯控制系统(五)

1.最后一个类地图类(界面)Map

1.1.宏常量

主要用于画图时设置的数据。
#define mainGrassWidth 270
#define mianGrassHeight 170
#define vertilGrassWidth 40
#define vertilGrassHeight 170
#define transverseGrassWidth 270
#define transverseGrassHeight 40
#define middleAreaWidth 260
#define middleAreaHeight 260
#define lineDistance 30

1.2.属性

(1)静态变量:灯
static Lamp elampLeft,elampMiddle,elampRight;//东三灯
static Lamp wlampLeft,wlampMiddle,wlampRight;//西三灯 static Lamp slampLeft,slampMiddle,slampRight;//南三灯
static Lamp nlampLeft,nlampMiddle,nlampRight;//北三灯
(2)车辆存储
static QVector<Car*> listAll;
//南三路
static QVector<Car*> listS2W;
static QVector<Car*> listS2N;
static QVector<Car*> listS2E;
//北三路
static QVector<Car*> listN2E;
static QVector<Car*> listN2S;
static QVector<Car*> listN2W;
//东三路
static QVector<Car*> listE2S;
static QVector<Car*> listE2W;
static QVector<Car*> listE2N;
//西三路
static QVector<Car*> listW2N;
static QVector<Car*> listW2E;
static QVector<Car*> listW2S;
(3)控制变量
LampControl control;//灯控制
ControlCar controlcar;//控制车
(4)路名集合,图片集合
static QString road[12];//路名集合
static QString car_img[4][2];//车子图片集合
(5)画画事件
QPainter *paint;//画画
(6)车
Car *car;

1.3.操作

*(1)explicit Map(QWidget parent = 0);
设置窗口大小,建立信号与槽的联系,启动相关线程。
*(2)void closeEvent(QCloseEvent );
关闭事件,关闭相关线程。
(3)void initLamp();
初始化灯。
*(4)void paintEvent(QPaintEvent );//画画事件
画画事件,画线条,图形。
*(5)void drawGrass(QPainter );//画草地
*(6)void drawLine(QPainter );//画线
*(7)void drawEWLine(QPainter );//画东西线
*(8)void drawSNLine(QPainter );//画南北线
*(9)void drawYellow(QPainter );//画黄线
*(10)void drawCrosswalk(QPainter );//画斑马线
*(11)void drawLamp(QPainter );//画灯
*(12)void drawEllipse(QPainter paint,Lamp lamp);//画圆
*(13)void drawLabel(QPainter );//画方向标识
*(14)void drawCar(QPainter );//画车
*(15)void drawTimeboard(QPainter );//画计时板

1.4.槽

(1)void updatemyself();
重绘窗口。
(2)void changeLamp(QString group,QString location,bool status);
改变灯的状态。
(3)void createCar();
创建车辆。

1.5.头文件

#ifndef MAP_H
#define MAP_H

#include <QWidget>
#include "lamp.h"
#include "lampcontrol.h"
#include <QPainter>
#include <QCloseEvent>
#include "controlcar.h"
#include <QVector>
#include "car.h"

#define mainGrassWidth 270
#define mianGrassHeight 170
#define vertilGrassWidth 40
#define vertilGrassHeight 170
#define transverseGrassWidth 270
#define transverseGrassHeight 40
#define middleAreaWidth 260
#define middleAreaHeight 260
#define lineDistance 30

namespace Ui {
class Map;
}

class Map : public QWidget
{
    Q_OBJECT

public:
    explicit Map(QWidget *parent = 0);
    ~Map();

public slots:
    void updatemyself();
    void changeLamp(QString group,QString location,bool status);
    void createCar();

public:
    static Lamp elampLeft,elampMiddle,elampRight;//东三灯
    static Lamp wlampLeft,wlampMiddle,wlampRight;//西三灯
    static Lamp slampLeft,slampMiddle,slampRight;//南三灯
    static Lamp nlampLeft,nlampMiddle,nlampRight;//北三灯

    LampControl control;//灯控制
    ControlCar controlcar;//控制车

    static QString road[12];//路名集合
    static QString car_img[4][2];//车子图片集合
    QPainter *paint;//画画

public:
    static QVector<Car*> listAll;
    //南三路
    static QVector<Car*> listS2W;
    static QVector<Car*> listS2N;
    static QVector<Car*> listS2E;
    //北三路
    static QVector<Car*> listN2E;
    static QVector<Car*> listN2S;
    static QVector<Car*> listN2W;
    //东三路
    static QVector<Car*> listE2S;
    static QVector<Car*> listE2W;
    static QVector<Car*> listE2N;
    //西三路
    static QVector<Car*> listW2N;
    static QVector<Car*> listW2E;
    static QVector<Car*> listW2S;

private:
    Ui::Map *ui;
    void closeEvent(QCloseEvent *);
    void initLamp();
    void paintEvent(QPaintEvent *);//画画事件
    void drawGrass(QPainter *);//画草地
    void drawLine(QPainter *);//画线
    void drawEWLine(QPainter *);//画东西线
    void drawSNLine(QPainter *);//画南北线
    void drawYellow(QPainter *);//画黄线
    void drawCrosswalk(QPainter *);//画斑马线
    void drawLamp(QPainter *);//画灯
    void drawEllipse(QPainter *paint,Lamp lamp);//画圆
    void drawLabel(QPainter *);//画方向标识
    void drawCar(QPainter *);//画车
    void drawTimeboard(QPainter *);//画计时板
    Car *car;

};
#endif // MAP_H

1.6.源文件

#include "map.h"
#include "ui_map.h"
#include <QMatrix>

QString Map::road[12] = {"S2W","S2N","S2E","N2E","N2S","N2W","E2S","E2W","E2N","W2N","W2E","W2S"};//路
QString Map::car_img[4][2] = {{":/new/picture/S2N.png",":/new/picture/S2N2.png"}
                         ,{":/new/picture/N2S.png",":/new/picture/N2S2.png"}
                         ,{":/new/picture/E2W.png",":/new/picture/E2W2.png"}
                         ,{":/new/picture/W2E.png",":/new/picture/W2E2.png"}};//车辆图片

QVector<Car*> Map::listAll;
QVector<Car*> Map::listS2W;
QVector<Car*> Map::listS2N;
QVector<Car*> Map::listS2E;
QVector<Car*> Map::listN2E;
QVector<Car*> Map::listN2S;
QVector<Car*> Map::listN2W;
QVector<Car*> Map::listE2S;
QVector<Car*> Map::listE2W;
QVector<Car*> Map::listE2N;
QVector<Car*> Map::listW2N;
QVector<Car*> Map::listW2E;
QVector<Car*> Map::listW2S;

Lamp Map::elampLeft,Map::elampMiddle,Map::elampRight;//东三灯
Lamp Map::wlampLeft,Map::wlampMiddle,Map::wlampRight;//西三灯
Lamp Map::slampLeft,Map::slampMiddle,Map::slampRight;//南三灯
Lamp Map::nlampLeft,Map::nlampMiddle,Map::nlampRight;//北三灯

Map::Map(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Map)
{
    ui->setupUi(this);
    this->setWindowTitle("十字路口交通灯控制系统");
    this->setMaximumSize(800,600);this->setMinimumSize(800,600);

    initLamp();
    QObject::connect(&control,SIGNAL(updateMain()),this,SLOT(update()));
    QObject::connect(&control,SIGNAL(lampChange(QString,QString,bool)),this
                     ,SLOT(changeLamp(QString,QString,bool)));
    QObject::connect(&controlcar,SIGNAL(create()),this,SLOT(createCar()));

    control.moveToThread(&control);
    control.start();
    controlcar.moveToThread(&controlcar);
    controlcar.start();

}

void Map::initLamp(){
    int elampLMR_x = 480;
    int elampLeft_y = 320,elampMiddle_y = 350,elampRight_y = 380;
    int wlampLMR_x = 295;
    int wlampLeft_y = 255,wlampMiddle_y = 225,wlampRight_y = 195;
    int slampLMR_y = 380;
    int slampLeft_x = 355,slampMiddle_x = 325,slampRight_x = 295;
    int nlampLMR_y = 195;
    int nlampLeft_x = 420,nlampMiddle_x = 450,nlampRight_x = 480;

    elampLeft.setInfo(elampLMR_x,elampLeft_y,false);
    elampMiddle.setInfo(elampLMR_x,elampMiddle_y,false);
    elampRight.setInfo(elampLMR_x,elampRight_y,true);

    wlampLeft.setInfo(wlampLMR_x,wlampLeft_y,false);
    wlampMiddle.setInfo(wlampLMR_x,wlampMiddle_y,false);
    wlampRight.setInfo(wlampLMR_x,wlampRight_y,true);

    slampLeft.setInfo(slampLeft_x,slampLMR_y,false);
    slampMiddle.setInfo(slampMiddle_x,slampLMR_y,false);
    slampRight.setInfo(slampRight_x,slampLMR_y,true);

    nlampLeft.setInfo(nlampLeft_x,nlampLMR_y,false);
    nlampMiddle.setInfo(nlampMiddle_x,nlampLMR_y,false);
    nlampRight.setInfo(nlampRight_x,nlampLMR_y,true);
}

void Map::paintEvent(QPaintEvent *){
    this->paint = new QPainter;
    this->paint->begin(this);

    this->drawGrass(this->paint);//画草地
    this->drawLine(this->paint);//画线
    this->drawLamp(this->paint);//画灯
    this->drawLabel(this->paint);//画路线标志
    this->drawCar(paint);

    this->paint->end();
}

void Map::drawGrass(QPainter *paint){
    QColor *color = new QColor(14,84,12);//草地颜色

    int grass1_x = 0,grass1_y = 0;//第一块草地坐标
    int grass2_x = 0,grass2_y = 430;//第二块草地坐标
    int grass3_x = 530,grass3_y = 0;//第三块草地坐标
    int grass4_x = 530,grass4_y = 430;//第四块草地坐标
    int grass5_x = 0,grass5_y = 280;//第五块草地坐标
    int grass6_x = 530,grass6_y = 280;//第六块草地坐标
    int grass7_x = 380,grass7_y = 0;//第七块草地坐标
    int grass8_x = 380,grass8_y = 430;//第八块草地坐标

    paint->fillRect(grass1_x,grass1_y,mainGrassWidth,mianGrassHeight,*color);
    paint->fillRect(grass2_x,grass2_y,mainGrassWidth,mianGrassHeight,*color);
    paint->fillRect(grass3_x,grass3_y,mainGrassWidth,mianGrassHeight,*color);
    paint->fillRect(grass4_x,grass4_y,mainGrassWidth,mianGrassHeight,*color);

    paint->fillRect(grass5_x,grass5_y,transverseGrassWidth,transverseGrassHeight,*color);
    paint->fillRect(grass6_x,grass6_y,transverseGrassWidth,transverseGrassHeight,*color);
    paint->fillRect(grass7_x,grass7_y,vertilGrassWidth,vertilGrassHeight,*color);
    paint->fillRect(grass8_x,grass8_y,vertilGrassWidth,vertilGrassHeight,*color);

    delete color;
}

void Map::drawLine(QPainter *paint){
    this->drawEWLine(paint);
    this->drawSNLine(paint);
    this->drawCrosswalk(paint);
    this->drawYellow(paint);
    int middleFrame_x = 270,middleFrame_y = 170;
    paint->setPen(Qt::white);
    paint->drawRect(middleFrame_x + 20,middleFrame_y + 20,middleAreaWidth - 40,middleAreaHeight - 40);
    paint->setPen(Qt::yellow);
    paint->drawRect(middleFrame_x,middleFrame_y,middleAreaWidth,middleAreaHeight);
}

void Map::drawEWLine(QPainter *paint){
    paint->setPen(Qt::white);
    int elinestar_x = 510,elineterminal_x = 800;
    int wlinestar_x = 0,wlineterminal_x = 290;
    int line1_y = 220,line2_y = 250;
    int line3_y = 350,line4_y = 380;

    paint->drawLine(elinestar_x,line1_y,elineterminal_x,line1_y);
    paint->drawLine(elinestar_x,line2_y,elineterminal_x,line2_y);
    paint->drawLine(elinestar_x,line3_y,elineterminal_x,line3_y);
    paint->drawLine(elinestar_x,line4_y,elineterminal_x,line4_y);

    paint->drawLine(wlinestar_x,line1_y,wlineterminal_x,line1_y);
    paint->drawLine(wlinestar_x,line2_y,wlineterminal_x,line2_y);
    paint->drawLine(wlinestar_x,line3_y,wlineterminal_x,line3_y);
    paint->drawLine(wlinestar_x,line4_y,wlineterminal_x,line4_y);
}

void Map::drawSNLine(QPainter *paint){
    paint->setPen(Qt::white);
    int slinestar_y = 410,slineterminal_y = 600;
    int nlinestar_y = 0,nlineterminal_y = 190;
    int line1_x = 320,line2_x = 350;
    int line3_x = 450,line4_x = 480;

    paint->drawLine(line1_x,slinestar_y,line1_x,slineterminal_y);
    paint->drawLine(line2_x,slinestar_y,line2_x,slineterminal_y);
    paint->drawLine(line3_x,slinestar_y,line3_x,slineterminal_y);
    paint->drawLine(line4_x,slinestar_y,line4_x,slineterminal_y);

    paint->drawLine(line1_x,nlinestar_y,line1_x,nlineterminal_y);
    paint->drawLine(line2_x,nlinestar_y,line2_x,nlineterminal_y);
    paint->drawLine(line3_x,nlinestar_y,line3_x,nlineterminal_y);
    paint->drawLine(line4_x,nlinestar_y,line4_x,nlineterminal_y);
}

void Map::drawYellow(QPainter *paint){
    paint->setPen(Qt::yellow);
    int eline_x = 510,wline_x = 290;
    int ewline1_y = 0,ewline2_y = 600;
    int sline_y = 410,nline_y = 190;
    int snline1_x = 0,snline2_x = 800;

    paint->drawLine(eline_x,ewline1_y,eline_x,ewline2_y);//东黄线
    paint->drawLine(wline_x,ewline1_y,wline_x,ewline2_y);//西黄线
    paint->drawLine(snline1_x,sline_y,snline2_x,sline_y);//北黄线
    paint->drawLine(snline1_x,nline_y,snline2_x,nline_y);//南黄线
}

void Map::drawCrosswalk(QPainter *paint){
    paint->setPen(Qt::white);
    int distance = 10;
    int snstartline_x = 0,snendline_x = 800;
    int nline1_y = 170,nline2_y = 190;
    int sline1_y = 410,sline2_y = 430;
    int ewstartline_y = 0,ewendline_y = 600;
    int eline1_x = 510,eline2_x = 530;
    int wline1_x = 270,wline2_x = 290;

    for(int x = snstartline_x;x <= snendline_x;x += distance){
        paint->drawLine(x,nline1_y,x,nline2_y);
        paint->drawLine(x,sline1_y,x,sline2_y);
    }
    for(int y = ewstartline_y;y <= ewendline_y;y += distance){
        paint->drawLine(eline1_x,y,eline2_x,y);
        paint->drawLine(wline1_x,y,wline2_x,y);
    }
}

void Map::drawLamp(QPainter *paint){
    paint->setPen(QPen(Qt::black,5));

    this->drawEllipse(paint,elampLeft);
    this->drawEllipse(paint,elampMiddle);
    this->drawEllipse(paint,elampRight);

    this->drawEllipse(paint,wlampLeft);
    this->drawEllipse(paint,wlampMiddle);
    this->drawEllipse(paint,wlampRight);

    this->drawEllipse(paint,slampLeft);
    this->drawEllipse(paint,slampMiddle);
    this->drawEllipse(paint,slampRight);

    this->drawEllipse(paint,nlampLeft);
    this->drawEllipse(paint,nlampMiddle);
    this->drawEllipse(paint,nlampRight);

    this->drawTimeboard(paint);
}

void Map::drawEllipse(QPainter *paint,Lamp lamp){
    if(lamp.getStatus()){
        paint->setBrush(QBrush(Qt::green,Qt::SolidPattern));
        paint->drawEllipse(400-20,300-20,40,40);
    }
    else{
        paint->setBrush(QBrush(Qt::red,Qt::SolidPattern));
    }
    paint->drawEllipse(lamp.getX(),lamp.getY(),Lamp::getWidth(),Lamp::getHeight());
}

void Map::drawLabel(QPainter *paint){
    int labelwidth = 30,labelheight = 30;

    int elabel_x = 540,eright_y = 190,emiddle_y = 220,eleft_y = 250;
    int wlabel_x = 230,wright_y = 320,wmiddle_y = 350,wleft_y = 380;
    int slabel_y = 440,sright_x = 420,smiddle_x = 450,sleft_x = 480;
    int nlabel_y = 130,nright_x = 290,nmiddle_x = 320,nleft_x = 350;
//1南,2东,3北,4西
    paint->drawPixmap(elabel_x,eright_y,labelwidth,labelheight,QPixmap(":/new/picture/2.3.png"));
    paint->drawPixmap(elabel_x,emiddle_y,labelwidth,labelheight,QPixmap(":/new/picture/2.2.png"));
    paint->drawPixmap(elabel_x,eleft_y,labelwidth,labelheight,QPixmap(":/new/picture/2.1.png"));

    paint->drawPixmap(wlabel_x,wright_y,labelwidth,labelheight,QPixmap(":/new/picture/4.1.png"));
    paint->drawPixmap(wlabel_x,wmiddle_y,labelwidth,labelheight,QPixmap(":/new/picture/4.2.png"));
    paint->drawPixmap(wlabel_x,wleft_y,labelwidth,labelheight,QPixmap(":/new/picture/4.3.png"));

    paint->drawPixmap(sright_x,slabel_y,labelwidth,labelheight,QPixmap(":/new/picture/1.1.png"));
    paint->drawPixmap(smiddle_x,slabel_y,labelwidth,labelheight,QPixmap(":/new/picture/1.2.png"));
    paint->drawPixmap(sleft_x,slabel_y,labelwidth,labelheight,QPixmap(":/new/picture/1.3.png"));

    paint->drawPixmap(nright_x,nlabel_y,labelwidth,labelheight,QPixmap(":/new/picture/3.3.png"));
    paint->drawPixmap(nmiddle_x,nlabel_y,labelwidth,labelheight,QPixmap(":/new/picture/3.2.png"));
    paint->drawPixmap(nleft_x,nlabel_y,labelwidth,labelheight,QPixmap(":/new/picture/3.1.png"));
}

void Map::drawCar(QPainter *paint){
    QMatrix matrix;
    for(int i = 0;i < listAll.size();i++){
        if(listAll.at(i)->isTurnLeft()){
            matrix.rotate(-90);
            paint->drawPixmap(listAll.at(i)->getStart_x()+ listAll.at(i)->getTurnline_x()
                              ,listAll.at(i)->getStart_y() + listAll.at(i)->getTurnline_y()
                              ,listAll.at(i)->getcarWidth(),listAll.at(i)->getcarHeight(),
               QPixmap(listAll.at(i)->getcarImg()).transformed(matrix,Qt::SmoothTransformation));
        }
        else if(listAll.at(i)->isTurnRight()){
            matrix.rotate(90);
            paint->drawPixmap(listAll.at(i)->getStart_x(),listAll.at(i)->getStart_y(),
              listAll.at(i)->getcarWidth(),listAll.at(i)->getcarHeight(),
               QPixmap(listAll.at(i)->getcarImg()).transformed(matrix,Qt::SmoothTransformation));
        }
        else{
            paint->drawPixmap(listAll.at(i)->getStart_x(),listAll.at(i)->getStart_y(),
              listAll.at(i)->getcarWidth(),listAll.at(i)->getcarHeight(),
                              QPixmap(listAll.at(i)->getcarImg()));
        }

    }
}

void Map::drawTimeboard(QPainter *paint){
    paint->setPen(Qt::red);
    int size = 20,linewidth = 5;
    paint->setFont(QFont("行楷",size,linewidth));
    int boardwidth = 30,boardheamp = 30;
    int eboard_x = 480,eboard_y = 285;
    int wboard_x = 290,wboard_y = 285;
    int sboard_x = 385,sboard_y = 380;
    int nboard_x = 385,nboard_y = 190;

    paint->fillRect(eboard_x,eboard_y,boardwidth,boardheamp,Qt::black);
    paint->drawText(eboard_x,eboard_y+25,QString::number(this->control.getEWtime()));

    paint->fillRect(wboard_x,wboard_y,boardwidth,boardheamp,Qt::black);
    paint->drawText(wboard_x,wboard_y+25,QString::number(this->control.getEWtime()));

    paint->fillRect(sboard_x,sboard_y,boardwidth,boardheamp,Qt::black);
    paint->drawText(sboard_x,sboard_y+25,QString::number(this->control.getSNtime()));

    paint->fillRect(nboard_x,nboard_y,boardwidth,boardheamp,Qt::black);
    paint->drawText(nboard_x,nboard_y+25,QString::number(this->control.getSNtime()));
}

void Map::updatemyself(){
    this->update();
}

void Map::changeLamp(QString group,QString location,bool status){
    if(group == "NS"){
        if(location == "middle"){
            this->slampMiddle.setStatus(status);
            this->nlampMiddle.setStatus(status);
        }
        else if(location == "left"){
            this->slampLeft.setStatus(status);
            this->nlampLeft.setStatus(status);
        }
    }
    else if(group == "WE"){
        if(location == "middle"){
            this->wlampMiddle.setStatus(status);
            this->elampMiddle.setStatus(status);
        }
        else if(location == "left"){
            this->wlampLeft.setStatus(status);
            this->elampLeft.setStatus(status);
        }
    }
}

void Map::createCar(){
    car = new Car;
    QObject::connect(car,SIGNAL(updateMain()),this,SLOT(updatemyself()));
    listAll.append(car);
    car->moveToThread(car);
    car->start();
    QByteArray ba = car->getRoadName().toLatin1();
    char *direction = ba.data();
    switch(direction[0]){
        case 'S':
            switch (direction[2]){
                case 'W':
                    listS2W.append(car);break;
                case 'N':
                    listS2N.append(car);break;
                case 'E':
                    listS2E.append(car);break;
            }
            break;
        case 'N':
            switch (direction[2]){
                case 'W':
                    listN2W.append(car);break;
                case 'S':
                    listN2S.append(car);break;
                case 'E':
                    listN2E.append(car);break;
            }
            break;
        case 'E':
            switch (direction[2]){
                case 'W':
                    listE2W.append(car);break;
                case 'N':
                    listE2N.append(car);break;
                case 'S':
                    listE2S.append(car);break;
            }
            break;
        case 'W':
            switch (direction[2]){
                case 'S':
                    listW2S.append(car);break;
                case 'N':
                    listW2N.append(car);break;
                case 'E':
                    listW2E.append(car);break;
            }
            break;
    }
    delete direction;
}

void Map::closeEvent(QCloseEvent *){
    control.terminate();
    controlcar.terminate();
    car->terminate();
    for(int i = 0;i < listAll.size();i++){
        listAll.at(i)->terminate();
    }
}

Map::~Map()
{
    delete ui;
}

2.结语

退出时,要退出线程,不然会提示线程任然在运行。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
好的,我可以帮您解答。如果您想在Qt实现LED交通灯的亮灭,可以通过以下步骤进行: 1. 创建一个新的Qt工程,并添加三个QLabel控件,分别代表红灯、黄灯和绿灯。 2. 设置QLabel的背景色,分别设置红色、黄色和绿色。 3. 在Qt中使用QTimer类,定时器每隔一段时间就切换灯的状态。例如,红灯亮10秒,黄灯亮3秒,绿灯亮15秒,然后再切换到红灯。 4. 在QTimer的槽函数中,根据当前灯的状态,改变对应QLabel的背景色,从而实现LED交通灯的亮灭。 以下是一个简单的示例代码: ``` #include <QtWidgets> class TrafficLight : public QWidget { public: TrafficLight(QWidget *parent = nullptr) : QWidget(parent) { QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(redLabel = new QLabel); layout->addWidget(yellowLabel = new QLabel); layout->addWidget(greenLabel = new QLabel); redLabel->setFixedSize(50, 50); yellowLabel->setFixedSize(50, 50); greenLabel->setFixedSize(50, 50); redLabel->setAutoFillBackground(true); yellowLabel->setAutoFillBackground(true); greenLabel->setAutoFillBackground(true); redLabel->setStyleSheet("background-color: red;"); yellowLabel->setStyleSheet("background-color: gray;"); greenLabel->setStyleSheet("background-color: gray;"); timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &TrafficLight::changeLight); timer->start(1000); } private: QLabel *redLabel; QLabel *yellowLabel; QLabel *greenLabel; QTimer *timer; int state = 0; void changeLight() { switch (state) { case 0: redLabel->setStyleSheet("background-color: red;"); yellowLabel->setStyleSheet("background-color: gray;"); greenLabel->setStyleSheet("background-color: gray;"); state = 1; timer->start(10000); break; case 1: redLabel->setStyleSheet("background-color: gray;"); yellowLabel->setStyleSheet("background-color: yellow;"); greenLabel->setStyleSheet("background-color: gray;"); state = 2; timer->start(3000); break; case 2: redLabel->setStyleSheet("background-color: gray;"); yellowLabel->setStyleSheet("background-color: gray;"); greenLabel->setStyleSheet("background-color: green;"); state = 3; timer->start(15000); break; case 3: redLabel->setStyleSheet("background-color: red;"); yellowLabel->setStyleSheet("background-color: gray;"); greenLabel->setStyleSheet("background-color: gray;"); state = 1; timer->start(10000); break; } } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); TrafficLight light; light.show(); return app.exec(); } ``` 运行上述代码,您将看到一个简单的LED交通灯示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大唐不良猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值