Qt的线性绘图控件有大名鼎鼎的Qwt,ChartDirector,小巧玲珑的QCustomPlot,当然还有自家的QtChart。长久以来QtChart在Qt家族里一直是收费的模块,只有商业版才可以使用,但Qt5.7之后将开放其权限。下面将介绍如何在VS中配置QtChart及其简单的静态曲线显示的使用。
如果需要在QT中使用QChart类,需要在安装Qt的时候勾选QChart组件,若没安装的话则无法使用QtChart功能,可打开Qt的安装目录查看是否有QtChart组件。
若没安装可重新安装Qt时勾选QtChart
或者 Qt5.10_msvc2017 | [Qt维护] 添加、删除和更新组件模块中添加QtChart组件。
参考网址:https://blog.csdn.net/u011607490/article/details/81459072
a. 新建一个Qt的gui工程,一路next
b. 打开项目的属性,把QtChart的库文件,包含目录、库目录,附加依赖项添加进来。
注意:Charts附加依赖项(很容易忽略,设置错了编译通过运行出错很不好找原因)
debug版本 :Qt5Chartsd.lib (多个 d)
release版本:Qt5Charts.lib
#include "QtChartsTest.h"
#include
#include
#include
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
a. 打开ui文件,在designer中拖动一个widget,并提升窗口部件为QChartView
2. 测试代码
#include "QtChartsTest.h"
#include
#include
#include
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