文章目录
1. 前言
QCustomPlot 是一个超强超小巧的qt绘图类,非常漂亮,非常易用,只需要加入一个qcustomplot.h
和qcustomplot.cpp
文件即可使用。
官方网址:https://www.qcustomplot.com/
下面是运行的效果如下:
2. 下载QCustomPlot的源码
源码下载地址:https://www.qcustomplot.com/index.php/download
3. 将QCustomPlot添加到QT项目
将qcustomplot.h
和qcustomplot.cpp
2个文件添加到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