VS+Qt使用QtChart配置及两种用法详解

Qt的线性绘图控件有大名鼎鼎的Qwt,ChartDirector,小巧玲珑的QCustomPlot,当然还有自家的QtChart。长久以来QtChart在Qt家族里一直是收费的模块,只有商业版才可以使用,但Qt5.7之后将开放其权限。下面将介绍如何在VS中配置QtChart及其简单的静态曲线显示的使用。

一,VS+Qt中QtChart环境配置

1. 检查是否安装QtChart类

如果需要在QT中使用QChart类,需要在安装Qt的时候勾选QChart组件,若没安装的话则无法使用QtChart功能,可打开Qt的安装目录查看是否有QtChart组件。
在这里插入图片描述
若没安装可重新安装Qt时勾选QtChart
在这里插入图片描述
或者 Qt5.10_msvc2017 | [Qt维护] 添加、删除和更新组件模块中添加QtChart组件。
参考网址:https://blog.csdn.net/u011607490/article/details/81459072

2. QtChart环境配置

a. 新建一个Qt的gui工程,一路next
在这里插入图片描述
在这里插入图片描述
b. 打开项目的属性,把QtChart的库文件,包含目录、库目录,附加依赖项添加进来。
在这里插入图片描述
在这里插入图片描述
注意:Charts附加依赖项(很容易忽略,设置错了编译通过运行出错很不好找原因)
debug版本 :Qt5Chartsd.lib (多个 d)
release版本:Qt5Charts.lib

二,QtChart的两种方法使用

1. 直接跳出QtChart框,没有附在窗口上;

#include "QtChartsTest.h"
#include <QtCharts>
#include <QChartView>
#include <QLineSeries>
using namespace QtCharts;

QtChartsTest::QtChartsTest(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	//直接跳出未附在窗口上
	QSplineSeries *LineSeries = new QSplineSeries();  //QSplineSeries 平滑曲线  QLineSeries折线
	for (double x = 0; x < 10; x += 0.1)
	{
		LineSeries->append(x, sin(x));
	}
	QChart *chart = new QChart();
	chart->addSeries(LineSeries);
	chart->legend()->hide();
	chart->createDefaultAxes();
	chart->setTheme(QChart::ChartThemeDark);

	QChartView *view = new QChartView(chart);  //创建视图,直接是一个窗口类型
	view->resize(600, 200);  //
	view->setWindowTitle("sin");
	view->setRenderHint(QPainter::Antialiasing);
	view->show();// show();

}

结果:
在这里插入图片描述
注意:在大点工程中,有其他窗口影响,QtChart窗口可能会跳出立即关闭或者一闪而过。
原因:在Qt这套逻辑中, 在add()方法内部定义的窗体,它也是个局部变量,方法结束就没了(WinForm中不是这样的). 上述链接的问答中,说是这个窗体是在栈内存中创建的, 应该要堆内存中创建.或者更好的办法是,把窗口声明为这个类的成员.
解决方法:在.h文件中申明下 public: QChart chart;
参考:https://blog.csdn.net/zhouyingge1104/article/details/94977016

2. 将QtCharts添加在Qwidget窗口

a. 打开ui文件,在designer中拖动一个widget,并提升窗口部件为QChartView
在这里插入图片描述
在这里插入图片描述
2. 测试代码

#include "QtChartsTest.h"
#include <QtCharts>
#include <QChartView>
#include <QLineSeries>
using namespace QtCharts;

QtChartsTest::QtChartsTest(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	直接跳出未附在窗口上
	//QSplineSeries *LineSeries = new QSplineSeries();  //QSplineSeries 平滑曲线  QLineSeries折线
	//for (double x = 0; x < 10; x += 0.1)
	//{
	//	LineSeries->append(x, sin(x));
	//}
	//QChart *chart = new QChart();
	//chart->addSeries(LineSeries);
	//chart->legend()->hide();
	//chart->createDefaultAxes();
	//chart->setTheme(QChart::ChartThemeDark);

	//QChartView *view = new QChartView(chart);  //创建视图,直接是一个窗口类型
	//view->resize(600, 200);  //
	//view->setWindowTitle("sin");
	//view->setRenderHint(QPainter::Antialiasing);
	//view->show();// show();

	//添加在widget中显示
	QSplineSeries *LineSeries = new QSplineSeries();  //QSplineSeries 平滑曲线  QLineSeries折线
	for (double x = 0; x < 10; x += 0.1)
	{
		LineSeries->append(x, sin(x));
	}
	QChart *chart = new QChart();
	chart->addSeries(LineSeries);
	chart->legend()->hide();
	chart->createDefaultAxes();
	chart->setTheme(QChart::ChartThemeDark);

	ui.widget->setChart(chart);
}

编译运行会出现错误
在这里插入图片描述
原因:是ui文件中没有写命名空间(.cpp 文件中using namespace QtCharts;无法体现在ui_QtChartsTest.h中)
解决方法:1在头文件中#include "ui_QtChartsTest.h"申明上面添加
#include
QT_CHARTS_USE_NAMESPACE
在这里插入图片描述
结果:
在这里插入图片描述
参考:https://blog.csdn.net/qq_28080659/article/details/78914373

  • 13
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值