题目:交通灯系统
1 系统设计
1.1 设计要求
1.1.1 设计任务
利用Qt-Creator编程实现各个路口红绿灯及时间显示,设计一个交通灯控制系统。
1.1.2 性能指标要求
(1)按照题目要求使用Qt编程,独立设计系统所需界面。实现交通灯计时显示、按钮控制交通灯启动和停止。
(2)在十字交叉路口,东南西北各方向都设置红、黄、绿色信号灯,红灯亮表示禁止通行,绿灯亮表示可以通行,红灯灭之前5秒钟黄灯开始闪烁直到绿灯亮起后黄灯熄灭。其中东西方向为主干道,南北方向为次干道,各个方向分别设置两位数码管,用来显示红灯和绿灯倒计时间,东西方向时间一致,南北方向时间一致。
(3)启动时主干道为60秒倒计时,次干道为40秒倒计时。
(4)单独设计人行道指示灯标志,当禁止行走时为红灯,当可以横穿马路时,绿灯亮起,在禁止通行之前10秒钟绿灯开始闪烁(以警示行人),最终红灯亮起绿灯熄灭。
(5)通过按键可随意设定主干道与次干道时间。
(6)真实场景仿真展示等。
1.2 设计思路及设计框图
1.2.1设计思路
交通灯倒计时设计的系统框图。
1.2.2总体设计框图
交通灯界面设计图。
2 各个模块程序的设计
设置初试时间:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("Traffic Light");
m_nClickCnt = 0;
//设置默认时间
ui->lineEdit_mainTime->setText("60");
ui->lineEdit_secondTime->setText("40");
//获取初始时间
m_nmainTime = ui->lineEdit_mainTime->text().toInt();
m_nsecondTime = ui->lineEdit_secondTime->text().toInt();
Init();
LightTime();
ui->car_up->setPixmap(QPixmap("://new/prefix1/tu/up.png"));//添加资源
//ui->car_up->setPixmap(QPixmap("://new/prefix1/picture/up.png"));//添加资源
ui->car_up->setScaledContents(true);//图片自动适应label大小
}
界面规则设定:
MainWindow::~MainWindow()
{
delete ui;
}
// 该函数将label控件变成一个圆形指示灯,需要指定颜色color以及直径
l->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);
}
界面绘制:
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);//画直线
int n = 390;
for(int i = 0; i < 8 ;i ++)
{
painter.drawLine(n,50,n,80);//画直线
n+=20;
}
n = 210;
for(int i = 0; i < 8 ;i ++)
{
painter.drawLine(230,n,260,n);//画直线
n+=20;
文章借鉴于此纷传