当程序启动的时候,会先启动控制台,控制台依次启动HUD、液晶显示器和多媒体,由于多媒体没有写,暂时以灰色代替。
今天先说说HUD部分的模拟上电实现,其实液晶显示器和HUD的实现原理是一样的。只是东西不同而已。原理都是先把上面的控件隐藏掉,后面根据需要在把它显示出来。先来看下我模拟HUD上电的画面,我这里模拟设置是HUD上电自检3分钟后进入工作状态。
这个程序的背景是透明的,在HUD上电瞬间将所有图标都将显示,模拟设备自检,在3秒钟后,只保留速度表,其他的都将隐藏,在激活的时候在显示出来。看下代码
/** * @brief HUD::init_HUD * @param initType * 初始化HUD */ void HUD::init_HUD(int initType) { switch (initType) { case 0: //断电 { ui->label_car->hide(); ui->label_constSpeed->hide(); ui->label_dial_1->hide(); ui->label_dial_2->hide(); ui->label_dial_3->hide(); ui->label_down->hide(); ui->label_esp->hide(); ui->label_gasoline->hide(); ui->label_Kmh->hide(); ui->label_left->hide(); ui->label_leftDown->hide(); ui->label_leftUp->hide(); ui->label_line->hide(); ui->label_point->hide(); ui->label_right->hide(); ui->label_rightDown->hide(); ui->label_rightUp->hide(); ui->label_runLine_L->hide(); ui->label_runLine_R->hide(); ui->label_scale_1->hide(); ui->label_scale_2->hide(); ui->label_scale_3->hide(); ui->label_turnLight_L->hide(); ui->label_turnLight_R->hide(); ui->label_turnRound->hide(); ui->label_up->hide(); number_1->hide(); number_2->hide(); number_3->hide(); break; } case 1: { ui->label_car->show(); ui->label_constSpeed->show(); ui->label_dial_1->show(); ui->label_dial_2->show(); ui->label_dial_3->show(); ui->label_down->show(); ui->label_esp->show(); ui->label_gasoline->show(); ui->label_Kmh->show(); ui->label_left->show(); ui->label_leftDown->show(); ui->label_leftUp->show(); ui->label_line->show(); ui->label_point->show(); ui->label_right->show(); ui->label_rightDown->show(); ui->label_rightUp->show(); ui->label_runLine_L->show(); ui->label_runLine_R->show(); ui->label_scale_1->show(); ui->label_scale_2->show(); ui->label_scale_3->show(); ui->label_turnLight_L->show(); ui->label_turnLight_R->show(); ui->label_turnRound->show(); ui->label_up->show(); number_1->show(); number_2->show(); number_3->show(); set_Current_Speed(888); QTimer::singleShot(3000,this,[=](){ ui->label_car->hide(); ui->label_constSpeed->hide(); ui->label_dial_1->hide(); ui->label_dial_2->hide(); ui->label_dial_3->hide(); ui->label_down->hide(); ui->label_esp->hide(); ui->label_gasoline->hide(); ui->label_Kmh->show(); ui->label_left->hide(); ui->label_leftDown->hide(); ui->label_leftUp->hide(); ui->label_line->hide(); ui->label_point->hide(); ui->label_right->hide(); ui->label_rightDown->hide(); ui->label_rightUp->hide(); ui->label_runLine_L->hide(); ui->label_runLine_R->hide(); ui->label_scale_1->hide(); ui->label_scale_2->hide(); ui->label_scale_3->hide(); ui->label_turnLight_L->hide(); ui->label_turnLight_R->hide(); ui->label_turnRound->hide(); ui->label_up->hide(); set_Current_Speed(0); }); break; } case 2: break; case 3: break; default: break; } }
这个函数名称起的其实有点问题,但是我这才能有限,实在是不知道叫什么好,只能起名字叫init_HUD了,这里的参数其实就是初始化的方式,0 表示断电即汽车熄火,1表示上电自检,和面的23还有其他的功能,比如发动机启动,等等,预留,也可能就没用了,哈哈哈。
当我传入参数为0的时候,那么就把所有的素材控件都隐藏掉。当我传入是1的时候,就把所有的素材控件偶读显示出来,完了启动一个单次定时器,定时3000ms,到时见只保留速度表部分,其他的再次隐藏掉就可以。大致的流程如下图所示。