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学习-界面中实时绘制函数图像 的相关文章

  • QT的Frame背景图片设置自学版

    1 新建一个qt rescource file file gt new file gt qt gt name path设置 gt 包括所需主项目 gt finish 2 edit gt resource 3 add gt add prefi
  • QWidget尺寸限定

    1 控件只能在最小和最大之间进行调整 不能超过范围 直接宽高同时设置 window setMinimumSize 200 200 window setMaximumSize 500 500 app QApplication sys argv
  • QT读取文件夹下的特定文件

    话不多说 直接上代码 个人理解的注释 参考就行 1 选择目录 获取目录下文件的绝对路径 QString filepath QFileDialog getExistingDirectory this QStringLiteral 选择目录 F
  • 如何使用Qt软件实现一个圆形按钮

    要使用Qt软件实现一个圆形按钮 可以按照以下步骤进行操作 使用以上步骤 你就可以在Qt软件中实现一个圆形按钮 记得根据自己的需要调整按钮的样式和布局 在Qt的项目中创建一个新的QPushButton控件 或者使用现有的QPushButton
  • Qt教程(2) : Qt元对象系统

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

    目录 一 打印输出文本的编辑 二 补充QT4信号与槽函数的写法 三 信号与槽的总结 一 打印输出文本的编辑 PS更正 去掉打印输出中的空格 space更正为nospace void Student treat QString food QS
  • qt控件学习(4)

    文章目录 QTabWidget 控件 QMenu QToolBar 控件 QSystemTrayIcon 任务栏控件 QTabWidget 控件 mainwindow h ifndef MAINWINDOW H define MAINWIN
  • QT学习 之 QwtPlot(数学绘图)

    QT对于统计图像 函数图像等的绘制是没有相关组件的帮助的 只有利用手工绘制图片 QwtPlot是用来绘制二维图像的widget 继承自QFrame 和 QwtPlotDict 不过严格的说来 它只是一个视图窗口 真正的绘制设备是它的中心部件
  • Qt中的项目类型(二)

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

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

    最近使用Qt做个界面 使用了QTreeView显示一个树形数据 想在界面打开时 默认选中某个节点 网上搜索全是MFC的TreeView的 在这里记一下QTreeView的方法 QTreeView的基本使用 QStandardItemMode
  • 新建的QT项目没有menubar、statusbar或者toolbar

    新建的QT项目没有menubar statusbar或者toolbar 右击窗口对象即可添加
  • Qt编译没使用Q_OBJECT导致编译出错,然后加入后编译仍出错的解决方法。

    这个问题 困扰我一下午 之前没加Q OBJECT导致不能使用信号和槽功能 导致我的程序已知编译出错 后来发现加上后 还是不能编译成功 继续出错 最后在overfolow stack上面找到了答案 原因首先是编译时没加Q OBJECT导致编译
  • QT学习——Qt工具介绍,Qt助手使用,第一个Qt程序,Qt字符串和字符编码

    一 Qt主要工具介绍 1 qt助手 assistant 2 qt构建器 qmake 3 qt设计师 designer 4 qt转换器 uic 5 qt资源编译器 rcc 6 qt元对象编译器 moc 处理语法扩展 7 qt创造器IDE qt
  • QT报错:multiple definition of 'qMain(int ,char**)'

    QT导入项目时 出现重定义错误 今天在导入人家完整的QT项目时 在导入之后 点击构建 出现很多重定义的问题 具体如下图所示 出现重定义错误 经过网上查找解决办法 得知是因为重复的导入项目 导致项目中项目文件重复引用了一些文件 如下图所示 解
  • 数据隐藏之Qt中d指针详解

    最近看到代码有用到了Qt中的Q D指针 就去学习了下 发现真的很好用 因此写一篇文章总结下 student h class CStudent public CStudent CStudent private string m name in
  • 基于QT 实现的LearnGL例子

    LOpenGL 是学习OpenGL非常好的资料 网址是 LearnOpenGL CN learnopengl cn github io 最近复习OpenGL 基于QT 拷贝实现了LearnGL的一些例子 下载地址 QT OpenGL 学习基
  • 【QT学习】基础篇 3.QT助手(数据手册)存放位置和使用

    学习STM32会使用到库函数文档来进行程序的编写 QT也有类似库函数 下列是QT助手的位置介绍 首先QT助手所在目录 这样就可以通过索引 搜索等找到相应函数
  • 使用QT纯代码创建(查找)对话框详细步骤与代码

    一 创建项目文件 打开Qt Creator gt 文件 gt 新建文件或项目 gt 选择Qt Widgets Application 为项目起名字 输入类的名字 二 了解每个文件的作用 项目创建完毕之后就会出现以下几个文件 先来分别介绍以下
  • QT---UI的使用

    目录 一 UI的介绍 二 UI的使用 一 UI的介绍 UI的使用是指通过拖拽控件来绘制界面 二 UI的使用

随机推荐

  • 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