【目的】
显示屏上创建LED图标,并这现他的定时闪烁。
【实现步骤】
1、新建QT5工程。
2、在桌面添加两个图标,一个图标对象名称设置为lable_led1。
3、实现图标的转换,先在mainwindow.cpp创建一个函数,实现工功能为:将label控件变成一个圆形指示灯,需要指定颜色color以及直径size
具体内容如下:
// 该函数将label控件变成一个圆形指示灯,需要指定颜色color以及直径size
// color 0:grey 1:red 2:green 3:yellow
// size 单位是像素
void MainWindow::setLED(QLabel *label, int color, int size)
{
// 将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 = QString("border:1px solid black;"); // 边框为1px黑色
// 最后设置背景颜色
QString background = "background-color:";
switch (color) {
case 0:
// 灰色
background += "rgb(190,190,190)";
break;
case 1:
// 红色
background += "rgb(255,0,0)";
break;
case 2:
// 绿色
background += "rgb(0,255,0)";
break;
case 3:
// 黄色
background += "rgb(255,255,0)";
break;
default:
break;
}
const QString SheetStyle = min_width + min_height + max_width + max_height + border_radius + border + background;
label->setStyleSheet(SheetStyle);
}
并在mainwindow.h中声明:void setLED(QLabel* label, int color, int size);
4、上面的函数可以实现指定函数颜色、大小,我们再创建一个定时器函数,来定时改变这个led标签的颜色,那就可以实现灯的闪烁了。
我先在mainwindow.h中创建一个定时器void timerEvent(QTimerEvent *e);
同时定义一个变量:int timerid1;
5、在mainwindow.cpp中,实现定时器的回调函数,回调函数中,我们先判断是不是timerid1的回调,如果是,则颜色返转一下。这样就可以实现我所需要的功能了。
void MainWindow::timerEvent(QTimerEvent *e)
{
static bool ledstate = 0;
if(e->timerId()==timerid1)
{
ledstate = !ledstate;
setLED(ui->label_led1, ledstate, 16);
}
}
6、在main.cpp中,我开启定时:timerid1 = startTimer(1000);
然后编译,并把编译好的程序上传给开发板,就得到了一个闪烁的LED的效果了:
【总结】
本次实验,实现了QT定时器在米尔-芯驰D9360商显板上的运行,相比MCU开发板,有了QT的界入,在程序开发上面要简单很多,同时移植也会方便许多。
其效果如底部视频展示
更多回帖