怎么修改公司网站内容,平面设计工资一般薪资多少,大连网站建设企业,wordpress自定义登陆页面跳转目录 一、QChart基本介绍
1.1 QChart基本概念与用途
1.2 主要类的介绍
1.2.1 QChartView类
1.2.2 QChart类
1.2.3QAbstractSeries类
1.2.4 QAbstractAxis类
1.2.5 QLegendMarker
二、与图表交互
1. 动态绘制数据
2. 深入数据
3. 缩放和滚动
4. 鼠标悬停
三、主题 …目录 一、QChart基本介绍
1.1 QChart基本概念与用途
1.2 主要类的介绍
1.2.1 QChartView类
1.2.2 QChart类
1.2.3QAbstractSeries类
1.2.4 QAbstractAxis类
1.2.5 QLegendMarker
二、与图表交互
1. 动态绘制数据
2. 深入数据
3. 缩放和滚动
4. 鼠标悬停
三、主题
四、代码实践
4.1 踩坑
4.2 线性图绘制
4.3 散点图 4.4 柱状图
4.5 饼状图 一、QChart基本介绍
1.1 QChart基本概念与用途 QtCharts是一个Qt模块它提供了许多种常见的图表类型如折线图、柱状图、饼图、散点图、区域图、极坐标图等等。使用QtCharts可以轻松地把数据可视化帮助用户更好地理解数据进行分析和决策。以下是Qt官方的介绍 The QChart class manages the graphical representation of the charts series, legends, and axes. QChart is a QGraphicsWidget that you can show in a QGraphicsScene. It manages the graphical representation of different types of series and other chart related objects like legend and axes. To simply show a chart in a layout, the convenience class QChartView can be used instead of QChart. In addition, line, spline, area, and scatter series can be presented as polar charts by using the QPolarChart class.
1.2 主要类的介绍
QChart主要由一下几个大类组成
1.2.1 QChartView类 视图对象实际是一个独立的widget,用以展示图表。
1.2.2 QChart类 是真正的图表对象QChart需要添加在QChartView对象下才可在正确展示出来。
1.2.3QAbstractSeries类 是数据集合在QChart中添加QAbstractSeries才可以展示出数据否则QChart只能展现坐标轴 主要数据类及继承关系如下。 1.2.4 QAbstractAxis类 坐标轴类用来设置QChart类的坐标轴属性包括范围、精度等也用来将QAbstractSeries类与QChart类对应起来。
Qt Charts支持以下坐标轴类型:
值轴 QValueAxis实际值添加到图表的轴上。它是使用QValueAxis类或ValueAxis QML类型实现的。类别轴QCategoryAxis有命名范围和可调范围宽度条形类别轴 QBarCategoryAxis类似于类别轴但所有范围的范围宽度都相同。bar类别轴是使用QBarCategoryAxis类或BarCategoryAxis QML类型实现的。日期-时间轴QDateTimeAxis将日期和时间添加到图表轴上。它是使用QDateTimeAxis类或DateTimeAxis QML类型实现的。对数值轴QLogValueAxis向图表的轴添加对数刻度。对数标度是一种基于数量级的非线性标度因此轴上的每个刻度都是前一个刻度乘以一个值。使用QLogValueAxis类或LogValueAxis QML类型实现对数轴 可以为一个图表定义多个轴。坐标轴可以放在图表的上下左右。此外轴可以是不同的类型。但是不支持混合轴类型这会导致不同的域例如在同一方向上指定QValueAxis和QLogValueAxis。
1.2.5 QLegendMarker 图例是一个显示图表图例的图形对象。图例对象不能被创建或删除但是它们可以通过QChart类被引用。当序列发生变化时图例状态由QChart或ChartView更新。 图例可以位于图表的下方或上方也可以位于图表的左侧或右侧。默认情况下图例是附加到图表视图的但它可以分离到一个可以自由移动的单独图形项。可以隐藏图例中的单个标记也可以隐藏整个图例。 图例标记可以通过使用QLegendMarker基类和每个序列类型的子类来修改: QAreaLegendMarker、QBarLegendMarker、QBoxPlotLegendMarker、 QCandlestickLegendMarker和QXYLegendMarker。
二、与图表交互 用户可以通过以下方式与图表进行交互动态地向图表添加值、深入聚焦数据、放大和缩小图表、滚动图表、单击图表中的项目或将鼠标悬停在图表上。
1. 动态绘制数据 可以动态地向图表添加数据并使图表视图自动滚动以显示新数据。
2. 深入数据 例如可以将下钻效果实现为条形图或饼状图。当用户在图表中选择项目时将显示该项的更详细视图 例如可以对条形图或饼图实现下钻效果。当用户在图表中选择一个项目时将显示该项目的更详细视图。这是通过删除第一个序列并添加另一个序列来实现的。
3. 缩放和滚动 用户可以使用键盘进行缩放和滚动。它们可以使用方向键滚动图表也可以使用正负键放大或缩小图表。此外QRubberBand可以用来选择要放大的区域。
4. 鼠标悬停 可以将槽连接到终端用户单击图表中的项或将鼠标悬停在图表上时发出的信号。这使您能够向图表中添加元素如标注。
三、主题 主题是应用于图表的所有视觉元素的UI样式相关设置的内置集合例如颜色、画笔、画刷和字体系列以及轴、标题和图例。
Qt图表具有以下预定义的主题:
Light主题这是默认主题天蓝色的主题黑暗的主题砂褐色主题自然颜色系统(NCS)蓝色主题高反差主题冰蓝色主题Qt的主题
可以通过更改颜色、画笔、画刷和字体来定制主题。可以通过修改Qt Charts的源代码来添加新的主题。
注意更改主题将覆盖之前应用于该系列的所有自定义。
四、代码实践
4.1 踩坑
必须声明命名空间库必须与编译器选择模式对应。
using namespace QtCharts; 4.2 线性图绘制
//折线图connect(ui.pushButton_zhexian, QPushButton::clicked, this, [] {//QLineSeries *lineSeries1 new QLineSeries(); //折线//QLineSeries *lineSeries2 new QLineSeries();QSplineSeries *lineSeries1 new QSplineSeries(); //平滑曲线QLineSeries *lineSeries2 new QLineSeries();qsrand(QTime::currentTime().second());for (int i 0; i 41; i){ qreal y qrand() % 100;if (i 20){qreal x i;lineSeries1-append(x, y);}else{qreal x i - 21;lineSeries2-append(x, y);}}lineSeries1-setColor(Qt::blue);lineSeries1-setPen(QPen(Qt::blue, 2));lineSeries1-setName(line1);//图例的名字lineSeries2-setColor(Qt::red);lineSeries2-setPen(QPen(Qt::red, 2, Qt::PenStyle::DashDotDotLine));lineSeries2-setName(line2);lineSeries1-setPointLabelsVisible(true);lineSeries2-setPointLabelsVisible(true);//创建QChartQChart *chart new QChart();chart-setTitle(Line Chart);//设置标题chart-addSeries(lineSeries1); //将折线系列添加到图标chart-addSeries(lineSeries2);//修改图例QLegend * legned chart-legend();legned-setAlignment(Qt::AlignBottom);legned-setBackgroundVisible(false);legned-setMarkerShape(QLegend::MarkerShape::MarkerShapeRectangle);//创建X轴QValueAxis *axisX new QValueAxis();axisX-setLabelFormat(%.0f);//设置标签格式axisX-setTitleText(X轴);axisX-setRange(0, 20);//设置范围axisX-setTickCount(21); //设置tickCount 即标签数量为21 0-21axisX-setGridLineVisible(false);//设置主刻度线不可见//axisX-hide();//隐藏刻度线 X周 0-10 不可见//创建Y轴QValueAxis *axisY new QValueAxis();axisY-setTitleText(Y轴);axisY-setRange(0, 100);//设置范围axisY-setTickCount(11); //设置tickCount 即标签数量为11 100进行10等分 11个标签 //关联轴到Chart和QSerieschart-addAxis(axisX, Qt::AlignBottom);chart-addAxis(axisY, Qt::AlignLeft);lineSeries1-attachAxis(axisX);lineSeries1-attachAxis(axisY);lineSeries2-attachAxis(axisX);lineSeries2-attachAxis(axisY);//创建QChartView 对象显示图表QChartView * chartview new QChartView(chart, ui.tab_3);chartview-setRenderHint(QPainter::Antialiasing);//抗锯齿//显示窗口、QMainWindow *win new QMainWindow(ui.tab_3);win-setCentralWidget(chartview);win-resize(800, 600);win-setWindowTitle(Test_折线图);win-show();}); 4.3 散点图
connect(ui.pushButton_sactter, QPushButton::clicked, this, []() {QScatterSeries *scatterSeries new QScatterSeries();// 添加散点数据qsrand(QTime::currentTime().second());//设置随机数生成器的种子for (int i 0; i 20; i) {qreal x i;qreal y qrand() % 100;scatterSeries-append(x, y);qDebug() QPoint(x, y);//测试输出}// 创建 QChart 对象QChart *chart new QChart();chart-setTitle(Scatter Chart); // 设置标题chart-addSeries(scatterSeries); // 将散点系列添加到图表中// 创建 QValueAxis 对象作为 X 轴QValueAxis *axisX new QValueAxis();axisX-setLabelFormat(%.0f); // 设置标签格式axisX-setTitleText(X Axis);axisX-setRange(0, 20); // 设置范围axisX-setTickCount(21); // 设置 tickCount即标签数量为 21chart-addAxis(axisX, Qt::AlignBottom); // 将 X 轴添加到图表中scatterSeries-attachAxis(axisX); // 散点系列关联 X 轴// 创建 QValueAxis 对象作为 Y 轴QValueAxis *axisY new QValueAxis();axisY-setTitleText(Y Axis);axisY-setRange(0, 100); // 设置范围axisY-setTickCount(11); // 设置 tickCount即标签数量为 11chart-addAxis(axisY, Qt::AlignLeft); // 将 Y 轴添加到图表中scatterSeries-attachAxis(axisY); // 散点系列关联 Y 轴// 创建 QChartView 对象显示图表QChartView *chartView new QChartView(chart);chartView-setRenderHint(QPainter::Antialiasing); // 抗锯齿QMainWindow *win new QMainWindow(ui.tab_3);win-setCentralWidget(chartView);win-resize(800, 600);win-setWindowTitle(Test_饼状图);win-show();});4.4 柱状图
connect(ui.pushButton_bar, QPushButton::clicked, this, []() {//创建柱状形集对象QBarSet* set1 new QBarSet(语文);QBarSet* set2 new QBarSet(数学);QBarSet* set3 new QBarSet(英语);*set1 130 120 110 97 88;set2-append({ 148,128,137,98,88 }); set3-append(123);set3-append(86);set3-append(98);set3-append(68);set3-append(99);set1-setLabelColor(Qt::red);set2-setLabelColor(Qt::green);set3-setLabelColor(Qt::blue);//QBarSet封装为QStackedBarSeries //QBarSet类型封装成QStackedBarSeries类型是因为chart-append不能接收QBarSet的类型。QStackedBarSeries *bar1 new QStackedBarSeries();bar1-append(set1);QStackedBarSeries *bar2 new QStackedBarSeries();bar2-append(set2);QStackedBarSeries *bar3 new QStackedBarSeries();bar3-append(set3);//QChartQChart* chart new QChart();chart-addSeries(bar1);chart-addSeries(bar2);chart-addSeries(bar3);//创建QChartView 对象显示图表QChartView * chartview new QChartView(chart, ui.tab_3);//创建X轴QBarCategoryAxis *axisX new QBarCategoryAxis();QStringList list { 小张,王五,晓明 ,小红 ,小绿 };axisX-append(list);axisX-setTitleText(姓名);axisX-setGridLineVisible(false);//创建Y轴QValueAxis *axisY new QValueAxis();axisY-setTitleText(成绩);axisY-setRange(0, 150);//设置范围axisY-setTickCount(6); //设置tickCount 即标签数量为6 150进行5等分 6个标签 //设定坐标轴与数据对应chart-setAxisX(axisX, bar1);chart-setAxisX(axisX, bar2);chart-setAxisX(axisX, bar3);chart-setAxisY(axisY, bar1);chart-setAxisY(axisY, bar2);chart-setAxisY(axisY, bar3);//显示窗口、QMainWindow *win new QMainWindow(ui.tab_3);win-setCentralWidget(chartview);win-resize(800, 600);win-setWindowTitle(Test_柱状图);win-show();}); 4.5 饼状图 该代码中实践饼状图的基本绘制方法和图形属性的设置设置opengl加速绘制以及chartview的grap抓取保存图片的方法对比QScreen的截屏效果。
connect(ui.pushButton_bingzhuang, QPushButton::clicked, this, []() {QChartView*view new QChartView(ui.tab_3);view-setRenderHint(QPainter::Antialiasing);QChart* chart new QChart();chart-setTitle(成绩分布);view-setChart(chart);//设置饼图QPieSeries*pie new QPieSeries;QPieSlice* s1 pie-append(60分以下,20);QPieSlice* s2 pie-append(60-80分, 30);QPieSlice* s3 pie-append(60-90分, 30);QPieSlice* s4 pie-append(90-100分, 20);s4-setExploded(true);//设置此分块突出pie-setHoleSize(0.4);// 设置饼状图中间洞大小 0.0-1.0之间pie-setLabelsPosition(QPieSlice::LabelOutside);//设置slice label的位置pie-setLabelsVisible(true);pie-setUseOpenGL(true);//使用OpenGl来画 GPU 并行不卡顿 QAbstractSeries方法//字体QFont font qApp-font();font.setBold(true);font.setPointSize(20);chart-setTitleFont(font);//图例chart-legend()-setAlignment(Qt::AlignLeft);//设置各个模块颜色s1-setColor(Qt::red);s2-setColor(Qt::blue);s3-setColor(Qt::green);s4-setColor(Qt::yellow);chart-addSeries(pie);//设置主题 默认lightchart-setTheme(QChart::ChartTheme::ChartThemeBlueCerulean);//显示窗口、QMainWindow *win new QMainWindow(ui.tab_3);win-setCentralWidget(view);win-resize(800, 600);win-setWindowTitle(Test_饼状图);win-show();//保存图片 ChartView 自有方式QPixmap p view-grab();//QImage image p.toImage();image.save(chart.png);//截屏 通过winIDQScreen *screenQGuiApplication::primaryScreen();//保留应用程序的主屏幕(最初显示QWindows的屏幕)QPixmap pic screen-grabWindow(view-winId());QImage image2 pic.toImage();image2.save(chartPie.png);}); 五、在实际项目中的应用 QCharts在实际的项目中可以很好的可视化数据以多种形式统计可视化程序每日产生的数据从而多维度的评估项目的运行状况和运维效果等。 如在交通的停车场场景中对于不同时间尺度可以使用折线图统计车流量对于商场等常有活动的车场运维更有意义通过饼状图统计不同支付方式的占比对于企事业单位学校等固定卡、储值卡、临时卡、ETC等统计更有意义、通过统计车厂外围不同设备的异常更好的评估运行的稳定性、通过统计每日相机的识别平均置信度评估相机等架设合理性等等。 业务的评估对于不同场景下的运营状况有直观的反馈设备 异常、识别率、不同级别的错误报告、内存使用等等的统计对于无人车厂运行的稳定应也有直观的反馈。