在线时间234 小时
UID3301905
注册时间2017-1-8
NXP金币107
TA的每日心情 | 开心 2018-4-20 15:04 |
---|
签到天数: 8 天 [LV.3]偶尔看看II
金牌会员
- 积分
- 2948
- 最后登录
- 2023-7-24
|
本帖最后由 donatello1996 于 2022-4-15 11:24 编辑
IMX8MP是性能还算强大的Linux开发板,其GPU支持对QT开发环境和运行实例进行加速,可直接在版上部署QT开发环境和运行环境,QT示例程序输出可选择X窗口,VNC或framebuffer,三种输出所占用的CPU和GPU资源是差不多的。
首先搭建QT开发环境:
apt install qt5-default qtcreator
Debian或Ubuntu系统会自动搜寻最新QT安装包并安装,安装完毕的界面:
直接使用mobaxterm终端使用命令:
qtcreator
就可以打开QT了。QT开发环境里面有QLabel QPainter QImage相关控件类,其中QImage和QPainter是基于QLabel控件之上进行刷图和绘画的类,要想实现画点画线,这三者必不可少。
来做一个非常简单的折线图:
- void TBP::Line_Chart(int x1,int x2,QColor qc_back,QColor qc_line,QColor qc_point1,
- QColor qc_point2,int x_point_num,int y_edge)
- {
- int i=0;
- if(x1<0)x1 = 0;
- if(x1>100)x1 = 100;
- if(x2<0)x2 = 0;
- if(x2>100)x2 = 100;
- qimage.fill(qc_back);
- qpainter->setPen(qc_line);
- qpainter->drawLine(10 , 0 , 10 , y_edge);
- qpainter->drawLine(10 , y_edge , 490 , y_edge);
- for(i=0;i<=28;i++)
- line_chart_data1[i] = line_chart_data1[i+1];
- line_chart_data1[x_point_num] = x1;
- for(i=0;i<=28;i++)
- line_chart_data2[i] = line_chart_data2[i+1];
- line_chart_data2[x_point_num] = x2;
- for(i=0 ; i <= x_point_num ; i++)
- {
- Draw_Pixel1(5+10+30*i , y_edge - line_chart_data1[i] * 2 , 5 , qc_point1);
- Draw_Pixel1(5+10+30*i , y_edge - line_chart_data2[i] * 2 , 5 , qc_point2);
- if(i != x_point_num)
- {
- qpainter->setPen(qc_point1);
- qpainter->drawLine(5+10+30*i , y_edge - line_chart_data1[i]*2-3 , 5+10+30*(i+1),
- y_edge - line_chart_data1[i+1]*2-3);
- qpainter->setPen(qc_point2);
- qpainter->drawLine(5+10+30*i , y_edge - line_chart_data2[i]*2-3 , 5+10+30*(i+1),
- y_edge - line_chart_data2[i+1]*2-3);
- }
- }
- QWidget::update();
- }
复制代码 采用一个全局静态数组实现新数据的推移添加。
然后是仪表盘:
- void TBP::Dashboard(int value1,int value2,int value3,
- QColor qc1,QColor qc2,QColor qc3)
- {
- int i;
- if(value1 < 0)value1 = 0;
- if(value1 > 100)value1 = 100;
- if(value2 < 0)value2 = 0;
- if(value2 > 100)value2 = 100;
- static const QPoint secondHand[3] =
- {
- QPoint(4,17),
- QPoint(-4,17),
- QPoint(0, -100)
- };
- static const QPoint secondHand1[3] =
- {
- QPoint(2,17),
- QPoint(-2,17),
- QPoint(0, -50)
- };
- qpainter->restore();
- qpainter->save();
- qpainter->rotate(-156);
- for(i = 0 ; i <= 100 ; i++)
- {
- qpainter->rotate(3);
- if(i % 10 == 0 && i > 0)
- {
- qpainter->setPen(Qt::black);
- qpainter->drawLine(0,-130,1,-110);
- qpainter->drawLine(1,-130,0,-110);
- qpainter->drawLine(0,-130,0,-110);
- qpainter->drawLine(1,-130,1,-110);
- }
- else qpainter->setPen(Qt::blue);
- qpainter->drawLine(0,-130,0,-120);
- }
- qpainter->rotate(0);
- for(i = 0 ; i <= 20 ; i++)
- {
- qpainter->rotate(3);
- qpainter->setPen(QColor(255,255,0));
- qpainter->drawLine(0,-130,0,-110);
- }
- qpainter->setPen(Qt::black);
- QRectF rect1(-130 , -130 , 260, 260);
- qpainter->drawEllipse(rect1);
- QRectF rect2(-129 , -129 , 258, 258);
- qpainter->drawEllipse(rect2);
- QRectF rect3(-131 , -131 , 262, 262);
- qpainter->drawEllipse(rect3);
- QRectF rect4(-131 , -131 , 261, 261);
- qpainter->drawEllipse(rect4);
- QRectF rect5(-129 , -129 , 259, 259);
- qpainter->drawEllipse(rect5);
- qpainter->restore();
- qpainter->save();
- qpainter->rotate(-153 + value1 * 3);
- qpainter->setPen(qc1);
- qpainter->setBrush(qc1);
- qpainter->drawEllipse(-5,-5,10,10);
- qpainter->drawConvexPolygon(secondHand,3);
- qpainter->restore();
- qpainter->save();
- qpainter->rotate(-153+value2*3);
- qpainter->setPen(qc2);
- qpainter->setBrush(qc2);
- qpainter->drawEllipse(-5,-5,10,10);
- qpainter->drawConvexPolygon(secondHand,3);
- qpainter->restore();
- qpainter->save();
- qpainter->rotate((-value3)*3/5+804);
- qpainter->setPen(qc3);
- qpainter->setBrush(qc3);
- qpainter->drawEllipse(-5,-5,10,10);
- qpainter->drawConvexPolygon(secondHand1,3);
- qpainter->restore();
- qpainter->save();
- qpainter->setFont(QFont("Arial",12,QFont::Bold));
- qpainter->drawText(-80,125,"0");
- qpainter->drawText(-135,80,"10");
- qpainter->drawText(-160,13,"20");
- qpainter->drawText(-155,-22,"25");
- qpainter->drawText(-142,-58,"30");
- qpainter->drawText(-90,-113,"40");
- qpainter->drawText(-18,-135,"50");
- qpainter->drawText(125,-40,"75");
- qpainter->drawText(70,122,"100");
- qpainter->setPen(qc3);
- qpainter->setFont(QFont("Arial",8,QFont::Light));
- qpainter->drawText(-60,80,"990");
- qpainter->drawText(-15,100,"1040");
- qpainter->drawText(30,80,"1090");
- qpainter->setPen(Qt::darkBlue);
- qpainter->setBrush(Qt::darkBlue);
- qpainter->rotate(-146);
- for(i = 0 ; i <= 2950 ; i++)
- {
- qpainter->rotate(0.1);
- qpainter->drawLine(0,-180,0,-160);
- }
- QRectF rect9(-10, -180, 20, 20);
- qpainter->drawEllipse(rect9);
- qpainter->setPen(Qt::cyan);
- qpainter->setBrush(Qt::yellow);
- qpainter->rotate(-295);
- QRectF rect10(-10, -180, 20, 20);
- qpainter->drawEllipse(rect10);
- for(i = 0 ; i <= 2000 ; i++)
- {
- qpainter->rotate(0.1);
- qpainter->drawLine(0,-180,0,-160);
- }
- qpainter->drawEllipse(rect10);
- QWidget::update();
- }
复制代码
|
|