QT学习-界面中实时绘制函数图像

2023-11-08

通过重写QT中QWidget类中的paintEvent函数,我们就可以做到在widget中进行函数图像的绘制。(我使用的是QCreator的UI设计器)
首先我们需要从QWidget继承一个子类,并重写他的paintEvent

class show_location : public QWidget
{
    Q_OBJECT
protected:
    void paintEvent(QPaintEvent *);//重写函数,函数定义在源文件中

public:
    show_location(QWidget *parent = nullptr);
    ~show_location(){}

   	    int m_count;
        double x;
        int axis_x[240];//储存轴的值
        double axis_y[240];//储存y轴的值
        QTimer* m_Timer;//定时器,用于刷新图像计时

public slots:
    void creatData();//得到需要绘制的图像的函数值
    
private:
    Ui::show_location *ui;
};

在绘制时,需要用到QPainter,QPainter在定义时需要“绑定”widget,否则会显示为未激活。
下面是类中函数的定义:

show_location::show_location(QWidget *parent) : QWidget(parent)
{
    m_count = 0;
    m_Timer = new QTimer(this);
    m_Timer->start(125);//计时周期为125ms
    connect(m_Timer,SIGNAL(timeout()),this,SLOT(creatData()));125ms刷新一次函数
}
void show_location::creatData()
{
    if(m_count<240)//图像x轴为时间,显示范围为0.125*240 = 30s,
    {
        axis_x[m_count] = m_count;
        axis_y[m_count] = 0.5*m_count;//得到的函数数据的大小放在这即可
    }
    else          //30s后让更新x轴各点处大小
    {
        for(int i = 0;i<240;i++)
        {
            axis_x[i]+=1;
            if(i)
                axis_y[i-1] = axis_y[i];
            else
                axis_y[0] = axis_y[1];
        }
        axis_y[239] = 120;//得到的力的大小放在这即可
    }
    m_count++;
    update();//update函数可以调用paintEvent函数,进行图像的重绘
}
void show_location::paintEvent(QPaintEvent *)
{
    int temp;
    QPainter painter(this);//建立QPainter并绑定widget
    QPen pen;//生成画笔
    QFont font1("宋体",5,QFont::Bold,true);//生成字体
    pen.setColor(Qt::gray);
    pen.setStyle(Qt::SolidLine);
    pen.setWidthF(2);//此函数可定义宽度可精确到小数
    painter.setPen(pen);//画笔画布绑定
    painter.setFont(font1);字体画布绑定
    painter.setViewport(0, 0, width(), height());设置画布视窗大小大小为窗口(widget)大小
    painter.setWindow(0, 0, 256, 200); // (-10, 2)    (10, -2)都是100倍//设置逻辑坐标范围
    painter.fillRect(0, 0, 256, 200, Qt::white);背景颜色
    painter.drawLine(QPointF(0, 199), QPointF(256, 199));   // x
    painter.drawLine(QPointF(0, 0), QPointF(0, 200));     // y
    for(int i = 64;i<240;i+=64)//x轴
    {
         painter.drawLine(QPointF(i, 200), QPointF(i, 190)); //绘制x轴上的点
         if(m_count<240)
             temp = 240;
         else {
             temp = m_count;
         }
         painter.drawText(QPointF(i-10,185),QString::number(int((temp-240+i)/8))); //绘制文本
    }
    painter.drawText(QPoint(220,185),QString("t/s"));
    for(int i = 150;i>0;i-=50)//y轴
    {
         painter.drawLine(QPointF(0, i), QPointF(3, i)); //绘制x轴上的点
         painter.drawText(QPointF(6,i+10),QString::number(200-i)); //绘制文本
    }
    painter.drawText(QPoint(5,20),QString("y/cm"));
    pen.setColor(Qt::blue);
    painter.setPen(pen);
    for(int i = 0; i < 240&&i<m_count; i++)
    {
        if(i == 0)
            painter.drawPoint(QPointF(0, 200-axis_y[i]));
        else
            painter.drawLine(QPointF(i-1, 200-axis_y[i-1]), QPointF(i, 200-axis_y[i]));
    }
}

如果窗口内只有一个widget用于显示图像,则可以直接生成实例后,使用成员函数show()来生成新窗口。
如果有其他组件的话,可以在ui设计界面,在widget组件上右键选择提升为,在弹出窗口填入类的名称,以及类的头文件,点击提升即可
在这里插入图片描述
最后效果如图所示:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT学习-界面中实时绘制函数图像 的相关文章

  • QWidget尺寸限定

    1 控件只能在最小和最大之间进行调整 不能超过范围 直接宽高同时设置 window setMinimumSize 200 200 window setMaximumSize 500 500 app QApplication sys argv
  • Qt创建的子线程不断循环,主线程界面一直处于无响应状态

    说明 今天用子线程处理数据 但只创建了子线程 还没有来得及让子线程处理大量的数据 在子线程只作了简单处理 发现主线程界面一直不能响应 在主线程让子线程参数isStop true 也跳不出循环 while isStop emit mySign
  • Qt 的 Qss使用

    Qt 的 Qss 是一种用于定义用户界面的样式表语言 它可以用来定义控件的颜色 字体 边框 背景等样式 可以很方便的实现自定义的样式效果 Qss 的基本语法和 CSS 类似 主要是由选择器和样式属性构成 选择器 选择器用来指定要样式化的控件
  • QT学习(一)—— 第一个QT项目

    1 1 新建一个项目 添加项目名称 选择Qwidget类 暂时不选择Generate form那个 补充 这里介绍了一下widget mainWindow dialog三种类的关系 编译器用QT自带的 创建完毕 1 2 项目介绍 1 2 1
  • qt学习笔记4:QMainWindow 菜单栏、工具栏、状态栏、铆接部件、

    在创建基类的时候 有三大选择 一个是QWidge 空窗口 另一个就是QMainWindow QMainWindow是一个为用户提供主窗口的类 包含一个菜单栏 多个工具栏 多个链接部件 一个状态栏以及一个中心部件 是许多应用程序的基础 如文本
  • QT 在release 模式下构建项目使用断点调试

    pro文件内 release断点测试 QMAKE CXXFLAGS RELEASE QMAKE CFLAGS RELEASE WITH DEBUGINFO QMAKE LFLAGS RELEASE QMAKE LFLAGS RELEASE
  • Qt教程(2) : Qt元对象系统

    元对象是指用于描述另一个对象结构的对象 使用编程语言具体实现时 其实就是一个类的对象 只不过这个对象专门用于描述另一个对象而已 比如 class B class A B mb 假设 mb 是用来描述类 A 创建的对象的 则 mb 就是元对象
  • QT框架简介

    刚开始接触QT开发的时候用的是Qt 5 6 0版本 开发过程中没有仔细了解过Qt具体的框架结构 只负责项目相关模块用C 进行开发和维护 对QT本身没有关注 只是当成一个开发工具而已 随着维护的内容深入 发现来对整个项目缺乏全面的了解 不知道
  • 用QT实现同步调用WebService

    QT提供了QNetworkAccessManager来访问 QT帮助文档里有这么一段 QNetworkAccessManager manager new QNetworkAccessManager this connect manager
  • QT的UI界面效果预览快捷键

    QtCreator的界面预览 Shift Alt R 运行快捷键 Ctrl R 只构建快捷键 Ctrl B 怕忘了 自己记录一下
  • 在ubuntu16.04搭建Qt4.8.6嵌入式开发环境

    环境以及软件版本 虚拟机环境 ubuntu16 04 64位 虚拟机环境中gcc的版本 gcc version 5 4 0 20160609 Qt版本 qt everywhere opensource src 4 8 6 tar gz 下载
  • Qt中的项目类型(二)

    使用Qt进行软件开发 第一个要考虑的问题就是为需要开发的软件 选择一个合适的Qt项目类型 Qt中的项目类型有 Application 应用 项目 项目编译结果是可执行程序 Library 库 项目 项目编译结果是静态库或动态库 其他项目 辅
  • 模拟点击事件

    一 通过代码模拟用户对按钮的点击 模拟按钮的点击 方法一 使用btn click模拟用户的点击 btn click 方法二 两秒之后自动松开按钮 btn animateClick 2000 区别是方法一没有什么动画 界面展示 方法二有时间效
  • Qt中的线程详解

    概述 在多核时代 CPU 的主频已经进入瓶 颈 另辟蹊径地提高程序运行效率就是使用线程 充分利用多核的优势 线程可以看做是 轻量级进程 线程即可以由操作系统管理 也可以由应用程序管 1 为什么要使用线程 我们都知道 进程线程的概念是非常重要
  • 简单说说对QT中moveToThread实现多线程操作的理解

    在平时的编码过程中经常碰到QT的多线程问题 也大量接触了QT中的两种主流多线程写法 一种是继承QThread类并重载run函数 在run函数中写一个状态机或者计时器来实现对线程运作 一种是通过moveToThread的方式实现事件托管从而实
  • Qt编译没使用Q_OBJECT导致编译出错,然后加入后编译仍出错的解决方法。

    这个问题 困扰我一下午 之前没加Q OBJECT导致不能使用信号和槽功能 导致我的程序已知编译出错 后来发现加上后 还是不能编译成功 继续出错 最后在overfolow stack上面找到了答案 原因首先是编译时没加Q OBJECT导致编译
  • Qt应用程序允许使用高地址内存的设置

    1 Qt4版本 在 pro文件中添加以下代码 申请使用高位地址内存 QMAKE LFLAGS Wl large address aware 2 Qt5版本 在 pro文件中添加以下代码 允许使用高位内存 QMAKE LFLAGS WINDO
  • QT信号和槽的实现原理

    信号和槽是qt用于对象之间通信的核心机制 其目的类似于当一个动作发生的时候 需要对这个动作做出相应的处理 类似的还有借助于函数指针的回调机制 通过回调函数完成对此动作的操作 但是如果对一个庞杂的系统 这种回调函数的维护是相当的麻烦和危险的
  • Qt学习11:Dialog对话框操作总结

    文章首发于我的个人博客 欢迎大佬们来逛逛 完整Qt学习项目地址 源码地址 文章目录 QDialog QDialogButtonBox QMessageBox QFileDialog QFontDialog QColorDialog QInp
  • QT编译环境配置,以及开发板移植的问题

    一 QT编译环境的设置 编译环境的配置 这个是真个系统构建的时候配置的问题 比较麻烦 后面在补这部分的知识 韦东山的开发板和乌班图的编译工具链里面是具有qt的编译工具链的 自己看的是正点原子的视频 所以按照正点正点原子的编译工具进行配置的

随机推荐

  • Oracle的三种高可用集群方案

    转载自 http www cnblogs com baiboy p orc2 html label1 Oracle的三种高可用集群方案 1 RAC Real Application Clusters 多个Oracle服务器组成一个共享的Ca
  • matlab 奇异值分解

    1 奇异值分解 关于matlab中的diag函数 矩阵对角元素的提取和创建对角阵
  • CPT104 习题笔记

    调度算法 时间 突发时间 Burst time 通常 我们忽略I O时间 只考虑进程的CPU时间 因此 突发时间是进程在CPU上执行所花费的总时间 Arrival Time 到达时间是流程进入就绪状态并为其执行做好准备的时间 Exit ti
  • Spring属性占位符PropertyPlaceholderConfigurer的使用

    Spring属性占位符PropertyPlaceholderConfigurer的使用 1 一个简单的Demo 1 1 创建conf xml
  • git clone remote: HTTP Basic: Access denied问题解决

    今天用git下载项目 突然提示 查阅资料才发现是因为最近更改gitlab密码的缘故 进入控制面板如下目录 修改对应的git普通凭据 问题解决
  • 华为这么容易进吗?轻轻松松拿到25K的offer...

    美本计算机专业 代码能力一般 之前有过两段实习以及一个学校项目经历 本人面试的是测试开发岗 期间经历了笔试 gt 性格测试 gt 技术一面 gt 技术二面 gt 总监面 gt OC这几个环节 基本上每周完成一个环节 由于华为面试环节全部完成
  • 实战分享:I2C总线详解

    大家好 我是阿荣 感恩遇见 本文部分图文来源于网络 并经过整合 编辑和勘误 实战分享栏目将重点介绍嵌入式的基础知识 并融合一些实战经验 持续勘误和迭代 建议关注和收藏 WX同名 I2C总线是一种常用的通信接口 让我们先来看看百度百科对它的定
  • 微信小程序 - 暗黑模式(深色模式)

    最近暗黑模式成为了潮流 微信小程序也推出了暗黑模式适配 下面来记录一个下适配暗黑模式 效果图 一 实现 1 开启暗黑模式 在 app json 中配置 darkmode true app json darkmode true 2 配置主题文
  • Linux 下 C语言编写 TCP/IP文件传输

    一 概述 文件传输 分为文件名字和文件内容 传递文件名后 等待另外一端创建相应的文件并回复 然后在开始传输文件内容 以下程序还设计到目录的查询 二 目录的查询 主要头文件 include
  • Android Studio 安装 (MAC)

    一 下载地址 Download Android Studio App Tools Android Developers 二 安装配置 1 Do not import settings 2 Cancel gt Next 3 Standard
  • 极限验证,滑动验证-java实现

    先给大家看个图 图中共色框内的验证码 大家应该见过 今天咱们就实现这个插件 其实这个插件是第三方服务的 极限验证码 官网 http www geetest com 官网有文档还有教程 大家可以自己看 我也是运行官方的源码 1 在官网 htt
  • JS中断循环

    js中断循环 中断循环 for var i 1 i lt 200 i if i 7 0 break 中断循环 document write i t 中断一次循环 继续下面的循环 for var i 1 i lt 100 i if i 3 0
  • 计算机投影仪显示无信号如何解决,投影仪无信号输入的解决办法是什么?

    Lin 4987 2015 11 05 13 27 笔记本电脑连接投影仪无信号 1 检查投影机与电脑连接使用的是VGA线还是HDMI线 2 如果是VGA连接 请检查投影机是否选择到VGA或者电脑模式 如果是HDMI连接的话 请检查投影机是否
  • ECCV 2016《SSD: Single Shot MultiBox Detector》论文笔记

    本学弱喜欢在本子上记笔记 但字迹又丑 望看不懂我的字的大佬不要喷我 看得懂的大佬批评指正
  • HCIA Datacom_DHCP基础与原理、常见的网络服务与应用、PPPoE原理与配置

    DHCP基础与原理 一 应用场景 DHCP服务器能够为大量主机分配IP地址 并能够集中管理 DHCP用来自动分配IP地址 在DHCP中有两个角色 DHCP客户端 DHCP服务器 DHCP是一种类型的C S架构 二 报文类型 1 DHCP D
  • android 使用BitmapShader实现圆形以及放大镜效果

    在一些显示用户头像的时候 大多数都是显示圆形的 而不是显示一个正方形或者长方形 这样显得很呆板 视觉效果也不好看 今天就用二种方式实现图片圆形显示的效果 在先讲这个效果实现之前 讲下BitmapShader到底能干嘛 android有几个关
  • 多尺度无序池化卷积神经网络——MOP-CNN(MultiScale Orderless Pooling)

    本文讲解的是Yunchao Gong发表在2014年的ECCV会议上的 Multi Scale Orderless Pooling of Deep Convolutional Activation Features 中文译名是深度卷积激活特
  • EasyAR平面图形跟踪和识别图上显示视频

    功能简介 Planar Image Tracking是用于检测与跟踪日常生活中有纹理的平面物体 所谓 平面 的物体 可以是一本书 一张名片 一幅海报 甚或是一面涂鸦墙这类具有平坦表面的物品或事物 这些物体应当具有丰富且不重复的纹理 为了创建
  • Android-自定义UI模板

    我们要用UI模板的时候 如果所有的Topbar内容都是没有变的话 那我们用在xml文件中include进去就好了 但是如果Topbar中的内容是会随着fragment或者activity改变的话 拿我们总不能每次都去写多个文件 再分别inc
  • QT学习-界面中实时绘制函数图像

    通过重写QT中QWidget类中的paintEvent函数 我们就可以做到在widget中进行函数图像的绘制 我使用的是QCreator的UI设计器 首先我们需要从QWidget继承一个子类 并重写他的paintEvent class sh