查看: 1449|回复: 4

[主题月] 主题月:基于IMX8MP的QT GUI环境搭建与实例运行

[复制链接]
  • TA的每日心情
    开心
    2018-4-20 15:04
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    2948
    最后登录
    2023-7-24
    发表于 2022-4-12 23:03:08 | 显示全部楼层 |阅读模式
    本帖最后由 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控件之上进行刷图和绘画的类,要想实现画点画线,这三者必不可少。

    来做一个非常简单的折线图:
    89.JPG
    1. void TBP::Line_Chart(int x1,int x2,QColor qc_back,QColor qc_line,QColor qc_point1,
    2.                      QColor qc_point2,int x_point_num,int y_edge)
    3. {
    4.     int i=0;
    5.     if(x1<0)x1 = 0;
    6.     if(x1>100)x1 = 100;
    7.     if(x2<0)x2 = 0;
    8.     if(x2>100)x2 = 100;
    9.     qimage.fill(qc_back);

    10.     qpainter->setPen(qc_line);
    11.     qpainter->drawLine(10 , 0 , 10 , y_edge);
    12.     qpainter->drawLine(10 , y_edge , 490 , y_edge);


    13.     for(i=0;i<=28;i++)
    14.         line_chart_data1[i] = line_chart_data1[i+1];
    15.     line_chart_data1[x_point_num] = x1;

    16.     for(i=0;i<=28;i++)
    17.         line_chart_data2[i] = line_chart_data2[i+1];
    18.     line_chart_data2[x_point_num] = x2;

    19.     for(i=0 ; i <= x_point_num ; i++)
    20.     {
    21.         Draw_Pixel1(5+10+30*i , y_edge - line_chart_data1[i] * 2 , 5 , qc_point1);
    22.         Draw_Pixel1(5+10+30*i , y_edge - line_chart_data2[i] * 2 , 5 , qc_point2);
    23.         if(i != x_point_num)
    24.         {
    25.             qpainter->setPen(qc_point1);
    26.             qpainter->drawLine(5+10+30*i , y_edge - line_chart_data1[i]*2-3 , 5+10+30*(i+1),
    27.                                y_edge - line_chart_data1[i+1]*2-3);
    28.             qpainter->setPen(qc_point2);
    29.             qpainter->drawLine(5+10+30*i , y_edge - line_chart_data2[i]*2-3 , 5+10+30*(i+1),
    30.                                y_edge - line_chart_data2[i+1]*2-3);
    31.         }
    32.     }
    33.     QWidget::update();
    34. }
    复制代码
    采用一个全局静态数组实现新数据的推移添加。


    90.JPG


    然后是仪表盘:

    1. void TBP::Dashboard(int value1,int value2,int value3,
    2.                     QColor qc1,QColor qc2,QColor qc3)
    3. {
    4.     int i;
    5.     if(value1 < 0)value1 = 0;
    6.     if(value1 > 100)value1 = 100;
    7.     if(value2 < 0)value2 = 0;
    8.     if(value2 > 100)value2 = 100;
    9.     static const QPoint secondHand[3] =
    10.     {
    11.         QPoint(4,17),
    12.         QPoint(-4,17),
    13.         QPoint(0, -100)
    14.     };
    15.     static const QPoint secondHand1[3] =
    16.     {
    17.         QPoint(2,17),
    18.         QPoint(-2,17),
    19.         QPoint(0, -50)
    20.     };

    21.     qpainter->restore();
    22.     qpainter->save();
    23.     qpainter->rotate(-156);
    24.     for(i = 0 ; i <= 100 ; i++)
    25.     {
    26.         qpainter->rotate(3);
    27.         if(i % 10 == 0 && i > 0)
    28.         {
    29.             qpainter->setPen(Qt::black);
    30.             qpainter->drawLine(0,-130,1,-110);
    31.             qpainter->drawLine(1,-130,0,-110);
    32.             qpainter->drawLine(0,-130,0,-110);
    33.             qpainter->drawLine(1,-130,1,-110);
    34.         }
    35.         else qpainter->setPen(Qt::blue);
    36.         qpainter->drawLine(0,-130,0,-120);
    37.     }
    38.     qpainter->rotate(0);
    39.     for(i = 0 ; i <= 20 ; i++)
    40.     {
    41.         qpainter->rotate(3);
    42.         qpainter->setPen(QColor(255,255,0));
    43.         qpainter->drawLine(0,-130,0,-110);
    44.     }
    45.     qpainter->setPen(Qt::black);
    46.     QRectF rect1(-130 , -130 , 260, 260);
    47.     qpainter->drawEllipse(rect1);
    48.     QRectF rect2(-129 , -129 , 258, 258);
    49.     qpainter->drawEllipse(rect2);
    50.     QRectF rect3(-131 , -131 , 262, 262);
    51.     qpainter->drawEllipse(rect3);
    52.     QRectF rect4(-131 , -131 , 261, 261);
    53.     qpainter->drawEllipse(rect4);
    54.     QRectF rect5(-129 , -129 , 259, 259);
    55.     qpainter->drawEllipse(rect5);

    56.     qpainter->restore();
    57.     qpainter->save();
    58.     qpainter->rotate(-153 + value1 * 3);
    59.     qpainter->setPen(qc1);
    60.     qpainter->setBrush(qc1);
    61.     qpainter->drawEllipse(-5,-5,10,10);
    62.     qpainter->drawConvexPolygon(secondHand,3);

    63.     qpainter->restore();
    64.     qpainter->save();
    65.     qpainter->rotate(-153+value2*3);
    66.     qpainter->setPen(qc2);
    67.     qpainter->setBrush(qc2);
    68.     qpainter->drawEllipse(-5,-5,10,10);
    69.     qpainter->drawConvexPolygon(secondHand,3);

    70.     qpainter->restore();
    71.     qpainter->save();
    72.     qpainter->rotate((-value3)*3/5+804);
    73.     qpainter->setPen(qc3);
    74.     qpainter->setBrush(qc3);
    75.     qpainter->drawEllipse(-5,-5,10,10);
    76.     qpainter->drawConvexPolygon(secondHand1,3);

    77.     qpainter->restore();
    78.     qpainter->save();
    79.     qpainter->setFont(QFont("Arial",12,QFont::Bold));
    80.     qpainter->drawText(-80,125,"0");
    81.     qpainter->drawText(-135,80,"10");
    82.     qpainter->drawText(-160,13,"20");
    83.     qpainter->drawText(-155,-22,"25");
    84.     qpainter->drawText(-142,-58,"30");
    85.     qpainter->drawText(-90,-113,"40");
    86.     qpainter->drawText(-18,-135,"50");
    87.     qpainter->drawText(125,-40,"75");
    88.     qpainter->drawText(70,122,"100");

    89.     qpainter->setPen(qc3);
    90.     qpainter->setFont(QFont("Arial",8,QFont::Light));
    91.     qpainter->drawText(-60,80,"990");
    92.     qpainter->drawText(-15,100,"1040");
    93.     qpainter->drawText(30,80,"1090");

    94.     qpainter->setPen(Qt::darkBlue);
    95.     qpainter->setBrush(Qt::darkBlue);
    96.     qpainter->rotate(-146);
    97.     for(i = 0 ; i <= 2950 ; i++)
    98.     {
    99.         qpainter->rotate(0.1);
    100.         qpainter->drawLine(0,-180,0,-160);
    101.     }
    102.     QRectF rect9(-10, -180, 20, 20);
    103.     qpainter->drawEllipse(rect9);

    104.     qpainter->setPen(Qt::cyan);
    105.     qpainter->setBrush(Qt::yellow);
    106.     qpainter->rotate(-295);
    107.     QRectF rect10(-10, -180, 20, 20);
    108.     qpainter->drawEllipse(rect10);
    109.     for(i = 0 ; i <= 2000 ; i++)
    110.     {
    111.         qpainter->rotate(0.1);
    112.         qpainter->drawLine(0,-180,0,-160);
    113.     }
    114.     qpainter->drawEllipse(rect10);

    115.     QWidget::update();
    116. }
    复制代码




    今天心情不错
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32004
    最后登录
    2024-4-9
    发表于 2022-4-13 10:07:10 | 显示全部楼层
    期待做完善更新
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-20 09:36
  • 签到天数: 451 天

    [LV.9]以坛为家II

    3

    主题

    1147

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2338
    最后登录
    2024-3-20
    发表于 2022-4-13 15:01:25 | 显示全部楼层
    从图片上看,楼主的功能是简单的。
    从开发的过程看,楼主的基础运行环境已经安装并测试完毕了。
    楼主,我说得对吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-9 17:01
  • 签到天数: 1478 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92609
    最后登录
    2024-4-9
    发表于 2022-4-13 22:40:05 | 显示全部楼层
    期待更加完善的介绍~~
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2022-5-7 20:17:57 | 显示全部楼层
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-20 20:43 , Processed in 0.124238 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表