Qt---多线程绘制折线图

这篇具有很好参考价值的文章主要介绍了Qt---多线程绘制折线图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt多线程绘制折线图

需求:在ui中绘制折线图,需要在子线程中操作ui界面上的对象。因为子线程中创建图形化相关的不被允许,因此【思路1:】在子线程中仅仅读取数据,进行数据处理,将数据处理的结果返回给主线程,主线程操作ui界面进行绘制折线图。【思路2:】将ui界面的控件使用指针传递的方式直接传递给子线程使用,子线程中进行数据处理,处理完毕绘制折线图。(实际操作中,折线图需要customplot->replot()之后才会自动更新到ui界面上,否则需要人为的用鼠标在ui的相对应的绘图控件上点击或者滚动滑轮才可显示图像,但是子线程不允许此代码,因此需要使用信号和槽在主线程中执行此句代码。)文章来源地址https://www.toymoban.com/news/detail-633659.html

  • Qt多线成使用的是将继承于QObject的对象moveToThread到QThread对象中的方法
  • 绘图使用的是qCustomPlot第三方库

代码如下

  • my_task.h
#ifndef MY_TASK_H
#define MY_TASK_H

#include <QObject>
#include "qcustomplot.h"

class My_Task : public QObject
{
   
    Q_OBJECT
public:
    explicit My_Task(QObject *parent = nullptr);
 

signals:

 
     void task_0_signals(QCustomPlot* customplotOnThread);//使用的是主线程ui上的customPlot
     void task_draw0End_signal();//发送绘图结束信号
     void task_draw1End_signal(QCustomPlot *customPlot);
     void task_draw2End_signal(QVector<double> ticksVector,
                               QVector<double> valuesVector,
                               double maxX,
                               double maxY,
                               QColor color);

public slots:
    void task_draw0(QCustomPlot *customPlot,QCPGraph* graph,QCPGraph* graph1);
    void task_draw1();
    void task_draw2();

  void on_filePath_signal(QString filePath);


private:
    QCustomPlot *customPlot;
    QCPAxis *keyAxis;
    QCPAxis *valueAxis;
    QCPGraph *graph0 = nullptr;

    QString filePathName;
};

#endif // MY_TASK_H

  • my_task.cpp


#include "my_task.h"
#include "unistd.h"


My_Task::My_Task(QObject *parent) : QObject(parent)
{
   

}
 
/**
 * @brief My_Task::task_draw0
 * @param customPlot
 * 要从主线程的ui界面中传递customplot控件过来在子线程中调用,将主线程的graph对象传递
 * 过来,
 */
void My_Task::task_draw0(QCustomPlot *customPlot,QCPGraph* graph,QCPGraph* graph1)
{
   
    customPlot->setNoAntialiasingOnDrag(true);
    keyAxis = customPlot->xAxis;
    valueAxis = customPlot->yAxis;


 
//    graph0 = new QCPGraph(keyAxis,valueAxis);//子线程中新建图形化相关的对象报错

    QFile file(filePathName);
    QTextStream stream(&file);
   bool isOK = file.open(QIODevice::ReadOnly| QIODevice::Text);
   if(!isOK){
   

       qDebug()<<"文件打开失败";
     return;
   }

     QString str;
     //QVector<QString> strVector;
     QVector<double> amplitudeVector,phaseVector;
     while(!stream.atEnd()){
   
       str = stream.readLine();

       amplitudeVector<<str.section(" ",0,0).toDouble();
       phaseVector<<str.section(" ",1,1).toDouble();

     }

     QVector<double> ticksVector0,dataVector0,ticksVector1,dataVector1;

   dataVector0 = amplitudeVector;
   dataVector1 = phaseVector;
  int maxX = dataVector0.count();
  int maxY0 = 0,maxY1 = 0,maxY = 0;
     for(int i=0;i<dataVector0.count();i++){
   
          ticksVector0 << i;
          ticksVector1 << i;
          if(maxY0 <dataVector0.at(i))
              maxY0 = dataVector0.at(i);
          if(maxY1 <dataVector1.at(i))
              maxY1 

到了这里,关于Qt---多线程绘制折线图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt之基于QCustomPlot绘制直方图(Histogram),叠加正态分布曲线

    高斯分布(Gaussian distribution),又名正态分布(Normal distribution),也称\\\"常态分布\\\",也就是说,在正常的状态下,一般的事物,都会符合这样的分布规律。 比如人的身高为一个随机变量,特别高的人比较少,特别矮的也很少,大部分都集中在中等身高。 人的智商也是如此,社会精

    2024年02月06日
    浏览(43)
  • Qt绘制曲线图(基于qt画图QPainter)

    在没有QCharst模块时,可以使用QPainter自定义绘制曲线折线图 下面提供完整代码供参考: 直接在qt创建一个QMainWindow类的app的工程,不自动生成ui文件,然后把下面代码复制到mainwindow.cpp编译运行即可。 mainwindow.cpp: //博客:booinon //https://blog.csdn.net/boonion?spm=1011.2415.3001.5343

    2024年02月11日
    浏览(36)
  • QT5 QCustomPlot实现动态曲线绘制,可以左键放大、右键拖拽、跟随鼠标显示坐标

    下载文件,官网:https://www.qcustomplot.com/ 按照官网教程,qt添加帮助文件。 git或github下载:XCustomPlot 打开项目,将1下载的文件解压,添加qcustomplot.cpp/p。 在pro文件中添加QT += widgets printsupport、添加CONFIG += c++11. 引入头文件 #include “qcustomplot.h” 在ui中添加Widgeet,提升为QCustomP

    2024年02月10日
    浏览(36)
  • Qt(十三)QChart绘制折线图

    一、简单绘图 Qt Charts基于Qt的Graphics View架构,其核心组件是 QChartView 和 QChart QChartView是显示图标的视图,基类为QGraphicsView QChart的基类是QGraphicsltem 类的继承关系: 创建项目: .pro 文件中添加: QT += charts 代码如下:其他文件未修改,修改代码只在mainwindow.cpp文件中进行。 m

    2024年02月02日
    浏览(37)
  • 【QT】QCustomPlot开发笔记

    01、QCustomPlot简介 QCustomPlot 是一个用于科学绘图的 QT 第三方库,可以用于常见的二维图像绘制,比如函数曲线、参数方程曲线、热力图、柱状图、箱线图、极坐标绘图等。该库由德国人 Emanuel Eichhammer 开发,经历了多次版本迭代,支持跨平台,开源遵循 GNU GPL 协议,也可以联

    2024年02月12日
    浏览(30)
  • QT绘制饼图+柱状图+折线图

    项目需要使用到不同的统计图案的方法来显示统计数据 包括:饼图、柱状图、折线图。 饼图的实现 具体实现代码如下: 首先需要一个 QChartView 来存放饼图,实现如下: 拖拽一个 QGraphicsView ,并且将其提升为 QChartView , 柱状图的实现 同上: 首先需要一个 QChartView 来存放饼

    2024年02月16日
    浏览(33)
  • 【QCustomPlot】绘制 x-y 曲线图

    使用 QCustomPlot 绘图库辅助开发时整理的学习笔记。同系列文章目录可见 《绘图库 QCustomPlot 学习笔记》目录。本篇介绍如何使用 QCustomPlot 绘制 x-y 曲线图,需要 x 轴数据与 y 轴数据都已知,示例中使用的 QCustomPlot 版本为 Version 2.1.1 ,QT 版本为 5.9.2 。 目录 说明 1. 示例工程配

    2024年02月09日
    浏览(38)
  • Qt Charts - 绘制简单曲线图(1)

    QSplineSeries 类是Qt图表模块中的一个曲线系列类,用于绘制平滑的二次和三次曲线。这个系列通过在给定的数据点之间插值来绘制曲线,从而使得曲线更加平滑。 使用QSplineSeries时,需要将数据点作为QPointF类型的列表传递给数据集。然后将数据集添加到QChart中。可以使用QSpli

    2024年02月04日
    浏览(48)
  • Qt开发1--QCustomPlot的第一个示例

    本文记录了在Linux上使用QCustomPlot进行一个基本绘制所需的完整过程,包括如何使用qtcreator,编辑ui以及编写相应的C++代码。以下是详细步骤: 1、使用qtcreator启动开发环境: 启动后,显示以下一个操作界面:  2、通过菜单栏File-New File or Project启动项目新建向导: 3、选择App

    2024年02月11日
    浏览(33)
  • Qt应用开发(拓展篇)——示波器/图表 QCustomPlot

             QCustomPlot 是一个用于绘图和数据可视化的Qt C++小部件。它没有进一步的依赖关系,提供友好的文档帮助。这个绘图库专注于制作好看的,出版质量的2D绘图,图形和图表,以及为实时可视化应用程序提供高性能。         QCustomPlot可以导出各种格式,如矢量化

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包