基本要求:
(1)在十字交叉路口,东南西北各方向都设置红、黄、绿色信号灯,红灯亮表示禁止通行,绿灯亮表示可以通行,红灯灭之前5秒钟黄灯开始闪烁知道绿灯亮后黄灯熄灭。其中东西方向为主干道,南北方向为次干道,各个方向分别设置两位数码管,用来表示红灯和绿色倒计时间,东西方向时间一致,南北方向时间一致。
(2)启动时主干道为60秒倒计时,次干道为40秒倒计时
(3)单独设计人行指示灯标志,当禁止行走时为红灯,当可以横穿马路时,绿灯亮起。在禁止通行之前10秒钟开始闪烁(以警示行人),最终红灯亮起绿灯熄灭。
整体界面
部分功能:
1、交通灯绘制
void MainWindow::SetLed(QLabel* label, int color, int size,int type)
{
// 将label中的文字清空
label->setText("");
// 先设置矩形大小
// 如果ui界面设置的label大小比最小宽度和高度小,矩形将被设置为最小宽度和最小高度;
// 如果ui界面设置的label大小比最小宽度和高度大,矩形将被设置为最大宽度和最大高度;
QString min_width = QString("min-width: %1px;").arg(size); // 最小宽度:size
QString min_height = QString("min-height: %1px;").arg(size); // 最小高度:size
QString max_width = QString("max-width: %1px;").arg(size); // 最小宽度:size
QString max_height = QString("max-height: %1px;").arg(size); // 最小高度:size
// 再设置边界形状及边框
QString border_radius = QString("border-radius: %1px;").arg(size/2); // 边框是圆角,半径为size/2
QString border; // 边框为1px黑色
// 最后设置背景颜色
QString background = "background-color:";
switch (color) {
case 0:
// 灰色
if(type == 1)
border = QString("border:2px solid rgb(255,0,0);");
else if(type ==2)
border = QString("border:2px solid rgb(0,255,0);");
else if(type ==3)
border = QString("border:2px solid rgb(255,255,0);");
break;
case 1:
// 红色
background += "rgb(255,0,0)";
border = QString("border:1px solid red;");
break;
case 2:
// 绿色
background += "rgb(0,255,0)";
border = QString("border:1px solid green;");
break;
case 3:
// 黄色
background += "rgb(255,255,0)";
border = QString("border:1px solid yellow;");
break;
case 4:
// 黄色
background += "rgb(255,255,255)";
break;
default:
break;
}
const QString SheetStyle = min_width + min_height + max_width + max_height + border_radius + border + background;
label->setStyleSheet(SheetStyle);
}
2、十字路口绘制
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPen pen;
pen.setColor(Qt::black);
pen.setWidth(3);
painter.setPen(pen);
painter.drawLine(370,50,370,190);//画直线
painter.drawLine(230,190,370,190);//画直线
.....
painter.drawLine(550,350,550,490);//画直线
painter.drawLine(550,350,690,350);//画直线
}
3、设置交通灯的时间
void MainWindow::LightTime()
{
//初始化变量
count_red1 = 60;
count_green1 = -1;
count_yellow1 = 3;
count_red2 = -1;
count_green2 = 60;
count_yellow2 = 3;
//显示红绿灯时间
ui->lcd_e->display(count_green2);
ui->lcd_n->display(count_red1);
myTimer = new QTimer();
myTimer->start(1000); //启动QTimer
connect(myTimer,SIGNAL(timeout()),
this,SLOT(doProcessTimeOut1()));//绑定槽
connect(myTimer,SIGNAL(timeout()),
this,SLOT(doProcessTimeOut2()));//绑定槽
}
4、切换主次干道时间(切记要重启一下定时器strart())
void MainWindow::on_btn_change_clicked()
{
if(m_nClickCnt >=1)
{
m_nClickCnt = 0;
}else
{
m_nClickCnt +=1;
}
}
需要完整代码请私信