qt5 charts 程序

本文介绍了一个使用Qt进行数据可视化项目的实例,通过读取文本文件中的数据,在Qt界面中绘制X、Y、Z三个方向的变形曲线图。文章详细展示了如何创建Qt图表、设置轴线参数以及实现数据的动态更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码1:

QT       += core gui
QT       += charts

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QChart *m_chart;
    QLineSeries  *m_series;
    QChartView *m_chartView;

    QStringList  x_axis_lst ;
    QStringList  y_axis_lst ;
    QStringList  z_axis_lst ;

private slots:
    void on_action_open_triggered();

    void on_action_store_triggered();

    void on_action_close_triggered();

    void on_action_X_triggered();

    void on_action_Y_triggered();

    void on_action_Z_triggered();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#pragma warning (disable:4819)
#pragma execution_character_set("utf-8")  //加入这行
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qdebug.h>


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

    m_chart = new QChart();

    m_series = new QLineSeries(m_chart);

    m_chart->addSeries(m_series);
    m_chart->createDefaultAxes();

    m_chart->legend()->hide();

    m_chartView = new QChartView(m_chart);
    m_chartView->setRenderHint(QPainter::Antialiasing);
    setCentralWidget(m_chartView);


}

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

void MainWindow::on_action_open_triggered()
{
    qDebug("on_action_open_triggered\n");

    QString str_line ;

    QFile file("BXJC.txt");

    file.open(QIODevice::ReadOnly | QIODevice::Text);

    QTextStream stream_file(&file);

    QStringList  lst;

    x_axis_lst.clear();
    y_axis_lst.clear();
    z_axis_lst.clear();

    while(!stream_file.atEnd()){
        str_line = stream_file.readLine();
        qDebug()<<str_line;
        lst = str_line.split("\t");
        qDebug()<<lst;

        if(lst.length() ==3){

            x_axis_lst.append(lst[0]);
            y_axis_lst.append(lst[1]);
            z_axis_lst.append(lst[2]);
        }

    }


    file.close();
}

void MainWindow::on_action_store_triggered()
{
    qDebug("on_action_store_triggered\n");
    QString strFile =  QDateTime::currentDateTime().toString("yyyyMMddHHmmss") + ".png";
    //QPixmap pix = QPixmap::grabWidget(ui.lineView);

    QString fileName = QFileDialog::getSaveFileName(this, "保存图片", strFile, "PNG (*.png);;BMP (*.bmp);;JPEG (*.jpg *.jpeg)");
    if (!fileName.isNull())
    {
        QScreen * screen = QGuiApplication::primaryScreen();
        QPixmap p = screen->grabWindow(m_chartView->winId());
        QImage image = p.toImage();
        image.save(fileName);
    }

}

void MainWindow::on_action_close_triggered()
{
    qDebug("on_action_close_triggered\n");
}

void MainWindow::on_action_X_triggered()
{
    qDebug("on_action_X_triggered\n");
    m_chart->setTitle(tr("X方向变形曲线图"));

    if(x_axis_lst.length() != 24){

        return;
    }

    m_series->clear();
    double value ;
    double max_val = x_axis_lst[0].toDouble();
    double min_val  =x_axis_lst[0].toDouble();
    double delta ;
    for(int i =0 ;i< x_axis_lst.length(); i++){
        value = x_axis_lst[i].toDouble();
        m_series->append(i, value);

        if(value > max_val){

            max_val = value;

        }else if(value < min_val){

            min_val = value;
        }

    }

    qDebug()<<min_val;
    qDebug()<<max_val;

    delta = (max_val - min_val)/8 ;
    min_val = min_val - delta ;
    max_val = max_val + delta ;



    m_chart->axes(Qt::Vertical).first()->setRange(min_val, max_val);

    // Add space to label to add space between labels and axis
    QValueAxis *axisX = qobject_cast<QValueAxis*>(m_chart->axes(Qt::Horizontal).first());
    QValueAxis *axisY = qobject_cast<QValueAxis*>(m_chart->axes(Qt::Vertical).first());
    Q_ASSERT(axisY);
    Q_ASSERT(axisX);
    //axisY->setLabelFormat("%.1f  ");

    axisX->setTickCount(13);
    axisX->setMinorTickCount(1);
    axisX->setRange(0, 24);
    axisX->setLabelFormat("%u");
    m_chart->axes(Qt::Horizontal).first()->setGridLineVisible(true);

}

void MainWindow::on_action_Y_triggered()
{
    qDebug("on_action_Y_triggered\n");

    qDebug("on_action_X_triggered\n");
    m_chart->setTitle(tr("Y方向变形曲线图"));

    if(y_axis_lst.length() != 24){

        return;
    }




    m_series->clear();
    double value ;
    double max_val = y_axis_lst[0].toDouble();
    double min_val  =y_axis_lst[0].toDouble();
    double delta ;
    for(int i =0 ;i< y_axis_lst.length(); i++){
        value = y_axis_lst[i].toDouble();
        m_series->append(i, value);

        if(value > max_val){

            max_val = value;

        }else if(value < min_val){

            min_val = value;
        }

    }

    qDebug()<<min_val;
    qDebug()<<max_val;

    delta = (max_val - min_val)/8 ;
    min_val = min_val - delta ;
    max_val = max_val + delta ;



    m_chart->axes(Qt::Vertical).first()->setRange(min_val, max_val);


    // Add space to label to add space between labels and axis
    QValueAxis *axisX = qobject_cast<QValueAxis*>(m_chart->axes(Qt::Horizontal).first());
    QValueAxis *axisY = qobject_cast<QValueAxis*>(m_chart->axes(Qt::Vertical).first());
    Q_ASSERT(axisY);
    Q_ASSERT(axisX);
    //axisY->setLabelFormat("%.1f  ");

    axisX->setTickCount(13);
    axisX->setMinorTickCount(1);
    axisX->setRange(0, 24);
    axisX->setLabelFormat("%u");
    m_chart->axes(Qt::Horizontal).first()->setGridLineVisible(true);
}

void MainWindow::on_action_Z_triggered()
{
    qDebug("on_action_Z_triggered\n");
    qDebug("on_action_X_triggered\n");
    m_chart->setTitle(tr("Z方向变形曲线图"));

    if(z_axis_lst.length() != 24){

        return;
    }


    m_series->clear();
    double value ;
    double max_val = z_axis_lst[0].toDouble();
    double min_val  =z_axis_lst[0].toDouble();
    double delta ;
    for(int i =0 ;i< z_axis_lst.length(); i++){
        value = z_axis_lst[i].toDouble();
        m_series->append(i, value);

        if(value > max_val){

            max_val = value;

        }else if(value < min_val){

            min_val = value;
        }

    }

    qDebug()<<min_val;
    qDebug()<<max_val;

    delta = (max_val - min_val)/8 ;
    min_val = min_val - delta ;
    max_val = max_val + delta ;



    m_chart->axes(Qt::Vertical).first()->setRange(min_val, max_val);


    // Add space to label to add space between labels and axis
    QValueAxis *axisX = qobject_cast<QValueAxis*>(m_chart->axes(Qt::Horizontal).first());
    QValueAxis *axisY = qobject_cast<QValueAxis*>(m_chart->axes(Qt::Vertical).first());
    Q_ASSERT(axisY);
    Q_ASSERT(axisX);
    //axisY->setLabelFormat("%.1f  ");

    axisX->setTickCount(13);
    axisX->setMinorTickCount(1);
    axisX->setRange(0, 24);
    axisX->setLabelFormat("%u");
    m_chart->axes(Qt::Horizontal).first()->setGridLineVisible(true);
}

运行效果:
在这里插入图片描述

BXJC.txt 文件内容:

24
32.5801	-52.7876	0.1369
32.5786	-52.7892	0.1380
32.5784	-52.7845	0.1411
32.5812	-52.7852	0.1393
32.5782	-52.7863	0.1394
32.5791	-52.7852	0.1354
32.5788	-52.7841	0.1414
32.5788	-52.7817	0.1375
32.5745	-52.7833	0.1359
32.5815	-52.7854	0.1327
32.5822	-52.7841	0.1358
32.5839	-52.7826	0.1361
32.5820	-52.7852	0.1339
32.5800	-52.7863	0.1325
32.5792	-52.7845	0.1416
32.5807	-52.7834	0.1395
32.5778	-52.7846	0.1412
32.5792	-52.7843	0.1371
32.5794	-52.7833	0.1406
32.5806	-52.7841	0.1411
32.5800	-52.7863	0.1380
32.5785	-52.7840	0.1368
32.5811	-52.7848	0.1412
32.5828	-52.7863	0.1356

代码:
https://download.youkuaiyun.com/download/wowocpp/12419643

<think>好的,用户的问题是关于如何解决缺少qt5charts.dll的问题,以及如何下载或使用这个文件。首先,我需要回忆Qt中QCharts模块的相关知识。记得QChartsQt官方提供的图表库,从Qt5.7开始引入,但需要手动安装。用户可能在安装Qt时没有勾选QCharts模块,导致缺少这个dll。 然后,用户提到的问题可能出现在运行时,特别是当程序Qt Creator中可以运行,但单独执行时提示缺少qt5charts.dll。这种情况通常是因为环境变量没有正确设置,或者相关的dll没有打包到应用程序目录中。 接下来,我需要参考用户提供的引用内容。引用1提到运行程序时出现Qt相关的错误,因为没有添加环境变量,可能需要使用windeployqt工具来部署依赖项。引用2和3则涉及如何安装QCharts模块,以及如何将编译后的dll复制到正确的位置。 解决方案应该包括检查Qt安装时是否勾选了QCharts模块,如果没有,可能需要重新安装或者通过MaintenanceTool添加。如果已经安装,使用windeployqt工具自动部署所需的dll文件。此外,手动下载dll可能存在风险,应该推荐用户从官方途径获取,比如重新编译源码或者使用Qt安装工具。 另外,用户可能需要知道如何在自己的项目中正确配置.pro文件,添加charts模块,并确保编译后的程序包含所有必要的依赖项。还需要提醒用户不要从第三方网站下载dll,以免安全问题。 总结步骤应该是:1.确认安装QCharts模块;2.使用部署工具打包依赖;3.手动处理或重新编译;4.环境变量检查。同时生成相关问题,帮助用户进一步解决可能遇到的问题,比如如何安装模块,使用windeployqt,或者处理其他Qt依赖问题。</think>### 解决缺少`qt5charts.dll`的完整方法 --- #### **步骤1:确认Qt安装时勾选QCharts模块** 1. 打开Qt维护工具`MaintenanceTool.exe`(位于Qt安装目录) 2. 选择`添加或移除组件` 3. 在`Qt` -> `Additional Libraries`中勾选`Qt Charts`模块[^2] 4. 完成安装后,Qt安装目录下的`bin`文件夹中会包含`qt5charts.dll`(例如:`C:\Qt\Qt5.12.1\msvc2017_64\bin`) --- #### **步骤2:使用windeployqt部署依赖** 1. 编译项目后,在构建目录中找到生成的可执行文件(如`your_app.exe`) 2. 打开Qt命令行工具(如`Qt 5.15.2 (MinGW 7.3.0 64-bit)`) 3. 执行以下命令自动复制所有依赖项(包括`qt5charts.dll`): ```bash windeployqt your_app.exe --qmldir C:\Qt\Qt5.15.2\5.15.2\mingw81_64\qml ``` 此命令会将Qt Charts相关DLL自动复制到可执行文件目录[^1] --- #### **步骤3:手动处理DLL(备用方案)** 1. **直接复制DLL**: - 从Qt安装目录的`bin`文件夹(如`C:\Qt\Qt5.12.1\msvc2017_64\bin`)中找到`qt5charts.dll` - 复制到以下两个位置: - 应用程序目录(与`.exe`同层) - 系统目录(`C:\Windows\System32`或`SysWOW64`,根据程序位数决定) 2. **编译源码获取DLL**(高级): - 下载Qt Charts源码([官方Git仓库](https://code.qt.io/cgit/qt/qtcharts.git/)) - 使用与Qt版本匹配的编译工具链编译生成DLL[^3] --- #### **步骤4:验证环境变量** 确保`PATH`环境变量包含Qt的`bin`目录路径: ```bash # 示例(添加到系统环境变量) C:\Qt\Qt5.15.2\mingw81_64\bin ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值