零基础开始QT绘图(1)

版权声明:本博客所有原创文章转发或者拷贝均须注明出处,本人保留版权法律追诉权。 https://blog.csdn.net/haigear/article/details/84405244

目前很多利用Arduino或者stm32来进行机器人或者相关的AI试验的伙伴们,都有界面显示或者图形显示的需求,如果仅仅是图形显示,我们完全可以借助processing来完成,既方便又快捷,但Processing的不足时完整的界面编写就变得困难了。
所以,我们可以借助QT来完成带有界面的绘图应该是比较方便的,个人的观点,至少比VC更容易。
从今天开始,我们来尝试使用QT完成下位机需要的图形显示。当然,如果您不需要带界面(菜单、工具栏、状态栏)的绘图可以参考我写的Processing绘图的相关文章。
Processing摸索前行(2)

在编写绘图程序之前,我们必须明白一点,QT中的绘图一般在paintEvent下实现。而paintEvent是Widget类或者Widget派生类下的一个虚函数,需要实现它才能便于我们绘图。
弄清楚了这个道理,那我们就可以着手开始我们的第一个绘图程序啦。

第一步,在QT中建立一个Widgets程序:
在这里插入图片描述
当然,您如果觉得Widget让你看着不舒服,不习惯,而你习惯了Form,那你完全可以进入程序把Widget删除,然后自己添加一个form也是完全可以的。需要注意的是在选择类信息的时候注意选择为Widget:
在这里插入图片描述

第二步,在Widget的cpp文件中实现虚函数paintEvent,在头文件中增加其声明:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    
    
    
}

头文件中增加声明
在这里插入图片描述
第三步,在paintEvent中写一个简单的painter调用程序

#include "widget.h"
#include "ui_widget.h"
#include"qpainter.h"        //不加入这个头文件,是不能调用QPainter的
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

//实现painterEvent
 void Widget::paintEvent(QPaintEvent *event)
{
      QPainter painters(this);   //初始化绘画器
      painters.drawRect(this->width()/4,this->height()/4,this->width()/2,this->height()/2);  绘制矩形
      }

当然,别忘记在Widget的cpp中加入头文件#include “qpainter.h”,否则你在写painters.drawRect函数的时候就不会有智能代码提示。当然也不会有程序的正确运行!
我们上面的程序就是在Widget的中央绘制了一个矩形,效果如下:
在这里插入图片描述
总结提炼:
1、在Processing中我们实现了虚函数void draw,而QT中我们实现了虚函数 void PaintEvent,不同的是Processing只有一个主文件,而这里我们的实现是在widget的cpp文件中完成的。
2、Processing中没有绘图器(QPainter),直接可以绘图,更不需要初始化Painter(当然,在VC中可能更复杂,需要初始化绘图设备)。
3、在Processing中,任何绘制都只直接显示出来的,比如rect语句就是绘制矩形,而不需要借助QPainter的drawRect的命令来实现绘制。
总结起来就是在QT中比Processing中多了一个步骤,即必须初始化一个QPainter。

好了,第一次绘图,到这里已经算完工了,后续我们将结合Arduino的传感器及通讯来完成一些稍微复杂一些的绘图。

猜你喜欢

转载自blog.csdn.net/haigear/article/details/84405244
今日推荐