QTVS2017+QT使用QCustomPlot绘图

Posted ZHONGCAI0901

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QTVS2017+QT使用QCustomPlot绘图相关的知识,希望对你有一定的参考价值。

1. 前言

QCustomPlot 是一个超强超小巧的qt绘图类,非常漂亮,非常易用,只需要加入一个qcustomplot.hqcustomplot.cpp文件即可使用。

官方网址:https://www.qcustomplot.com/

下面是运行的效果如下:

2. 下载QCustomPlot的源码

源码下载地址:https://www.qcustomplot.com/index.php/download

3. 将QCustomPlot添加到QT项目

qcustomplot.hqcustomplot.cpp2个文件添加到QT项目,如下:

在项目属性Qt Project Settings中,添加QT模块printsupport,如下:

在ui布局文件添加一个Widget,然后选择提升为...,如下:

在弹框提升的类名称中,填写QCustomPlot,然后选择添加

编译工程,运行效果如下:

4. 移植QCustomPlot Demo中的plots

解压QCustomPlot.tar.gz后,将qcustomplot\\examples\\plots移植到当前工程。通过修改setupDemo()来选择测试的demo,部分源码如下:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
	setGeometry(400, 250, 542, 390);

	setupDemo(12);
	//setupPlayground(ui.customPlot);
	// 0:  setupQuadraticDemo(ui.customPlot);
	// 1:  setupSimpleDemo(ui.customPlot);
	// 2:  setupSincScatterDemo(ui.customPlot);
	// 3:  setupScatterStyleDemo(ui.customPlot);
	// 4:  setupScatterPixmapDemo(ui.customPlot);
	// 5:  setupLineStyleDemo(ui.customPlot);
	// 6:  setupDateDemo(ui.customPlot);
	// 7:  setupTextureBrushDemo(ui.customPlot);
	// 8:  setupMultiAxisDemo(ui.customPlot);
	// 9:  setupLogarithmicDemo(ui.customPlot);
	// 10: setupRealtimeDataDemo(ui.customPlot);
	// 11: setupParametricCurveDemo(ui.customPlot);
	// 12: setupBarChartDemo(ui.customPlot);
	// 13: setupStatisticalDemo(ui.customPlot);
	// 14: setupSimpleItemDemo(ui.customPlot);
	// 15: setupItemDemo(ui.customPlot);
	// 16: setupStyledDemo(ui.customPlot);
	// 17: setupAdvancedAxesDemo(ui.customPlot);
	// 18: setupColorMapDemo(ui.customPlot);
	// 19: setupFinancialDemo(ui.customPlot);
	// 20: setupPolarPlotDemo(ui.customPlot);

	// for making screenshots of the current demo or all demos (for website screenshots):
	//QTimer::singleShot(1500, this, SLOT(allScreenShots()));
	//QTimer::singleShot(4000, this, SLOT(screenShot()));
}

void MainWindow::setupDemo(int demoIndex)
{
	switch (demoIndex)
	{
	case 0:  setupQuadraticDemo(ui.customPlot); break;
	case 1:  setupSimpleDemo(ui.customPlot); break;
	case 2:  setupSincScatterDemo(ui.customPlot); break;
	case 3:  setupScatterStyleDemo(ui.customPlot); break;
	case 4:  setupScatterPixmapDemo(ui.customPlot); break;
	case 5:  setupLineStyleDemo(ui.customPlot); break;
	case 6:  setupDateDemo(ui.customPlot); break;
	case 7:  setupTextureBrushDemo(ui.customPlot); break;
	case 8:  setupMultiAxisDemo(ui.customPlot); break;
	case 9:  setupLogarithmicDemo(ui.customPlot); break;
	case 10: setupRealtimeDataDemo(ui.customPlot); break;
	case 11: setupParametricCurveDemo(ui.customPlot); break;
	case 12: setupBarChartDemo(ui.customPlot); break;
	case 13: setupStatisticalDemo(ui.customPlot); break;
	case 14: setupSimpleItemDemo(ui.customPlot); break;
	case 15: setupItemDemo(ui.customPlot); break;
	case 16: setupStyledDemo(ui.customPlot); break;
	case 17: setupAdvancedAxesDemo(ui.customPlot); break;
	case 18: setupColorMapDemo(ui.customPlot); break;
	case 19: setupFinancialDemo(ui.customPlot); break;
	case 20: setupPolarPlotDemo(ui.customPlot); break;
	}
	setWindowTitle("QCustomPlot: " + demoName);
	statusBar()->clearMessage();
	currentDemoIndex = demoIndex;
	ui.customPlot->replot();
}

运行效果如下:

5. 移植过程出现的问题

问题1:编译时的错误log

1>ui_qtwidgetsapplication1.h(15): fatal error C1083: 无法打开包括文件: “qcustomplot.h”: No such file or directory (编译源文件 main.cpp)
1>ui_qtwidgetsapplication1.h(15): fatal error C1083: 无法打开包括文件: “qcustomplot.h”: No such file or directory (编译源文件 QtWidgetsApplication1.cpp)

解决办法:

因为和工程在同一个目录,设置头文件路径如下:打开项目属性 -> C/C++ -> 常规 -> 附加包含目录 -> $(ProjectDir)

问题2:编译时的错误log

1>qcustomplot.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall QPrinter::QPrinter(enum QPrinter::PrinterMode)" (??0QPrinter@@QAE@W4PrinterMode@0@@Z),该符号在函数 "public: bool __thiscall QCustomPlot::savePdf(class QString const &,int,int,enum QCP::ExportPen,class QString const &,class QString const &)" (?savePdf@QCustomPlot@@QAE_NABVQString@@HHW4ExportPen@QCP@@00@Z) 中被引用
1>qcustomplot.obj : error LNK2019: 无法解析的外部符号 "public: virtual __thiscall QPrinter::~QPrinter(void)" (??1QPrinter@@UAE@XZ),该符号在函数 "public: bool __thiscall QCustomPlot::savePdf(class QString const &,int,int,enum QCP::ExportPen,class QString const &,class QString const &)" (?savePdf@QCustomPlot@@QAE_NABVQString@@HHW4ExportPen@QCP@@00@Z) 中被引用
1>qcustomplot.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall QPrinter::setOutputFormat(enum QPrinter::OutputFormat)" (?setOutputFormat@QPrinter@@QAEXW4OutputFormat@1@@Z),该符号在函数 "public: bool __thiscall QCustomPlot::savePdf(class QString const &,int,int,enum QCP::ExportPen,class QString const &,class QString const &)" (?savePdf@QCustomPlot@@QAE_NABVQString@@HHW4ExportPen@QCP@@00@Z) 中被引用
1>qcustomplot.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall QPrinter::setOutputFileName(class QString const &)" (?setOutputFileName@QPrinter@@QAEXABVQString@@@Z),该符号在函数 "public: bool __thiscall QCustomPlot::savePdf(class QString const &,int,int,enum QCP::ExportPen,class QString const &,class QString const &)" (?savePdf@QCustomPlot@@QAE_NABVQString@@HHW4ExportPen@QCP@@00@Z) 中被引用
1>qcustomplot.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall QPrinter::setColorMode(enum QPrinter::ColorMode)" (?setColorMode@QPrinter@@QAEXW4ColorMode@1@@Z),该符号在函数 "public: bool __thiscall QCustomPlot::savePdf(class QString const &,int,int,enum QCP::ExportPen,class QString const &,class QString const &)" (?savePdf@QCustomPlot@@QAE_NABVQString@@HHW4ExportPen@QCP@@00@Z) 中被引用
1>qcustomplot.obj : error LNK2019: 无法解析的外部符号 "public: class QPrintEngine * __thiscall QPrinter::printEngine(void)const " (?printEngine@QPrinter@@QBEPAVQPrintEngine@@XZ),该符号在函数 "public: bool __thiscall QCustomPlot::savePdf(class QString const &,int,int,enum QCP::ExportPen,class QString const &,class QString const &)" (?savePdf@QCustomPlot@@QAE_NABVQString@@HHW4ExportPen@QCP@@00@Z) 中被引用

解决办法:
打开项目属性 -> Qt Project Settings -> Qt Modules -> 增加printsupport

5. 测试demo完整工程

测试时的完成工程代码下载路径如下:
https://download.csdn.net/download/ZHONGCAI0901/20964210?spm=1001.2014.3001.5501

以上是关于QTVS2017+QT使用QCustomPlot绘图的主要内容,如果未能解决你的问题,请参考以下文章

使用QT绘图控件QCustomPlot绘制波形图

使用QT绘图控件QCustomPlot绘制波形图

Qt使用QCustomPlot开发

Qt QCustomPlot使用记录

Qt5 QCustomPlot。实时大图

Qt绘图插件QCustomPlot下载 安装 配置 使用