qcustomplot 颜色_Qt编写自定义控件25-自定义QCustomPlot

本文介绍了如何使用Qt自定义QCustomPlot控件,实现包括设置轴范围、颜色、曲线、柱状图等丰富图表功能。通过封装易用函数,支持全局样式更改,提供多种图表类型,并兼容QCustomPlot1.0和2.0。文章展示了实现的效果图,并提供了核心代码。
摘要由CSDN通过智能技术生成

一、前言

上次在写大屏数据可视化电子看板系统时候,提到过改造QCustomPlot来实现柱状分组图、横向柱状图、横向分组图、鼠标悬停提示等。这次单独列出来描述,有很多人疑问为啥不用QChart,或者echart等形式,其实这两种方式我都尝试过,比如Qt5.7以后新增的QChart模块,曲线这块,支持数据量很小,而且用法极其不适应,非常别扭,尤其是10W以上数据量的支持,简直是渣渣,优点也是有很多的,比如动画效果,我看过他的完整源码,动画这块处理的非常好,连坐标轴都可以有动画效果,而且支持很多种效果,而且内置了很多套theme皮肤,省去了很多渣渣审美的程序员自己来配色,这个倒是挺方便的。而对于echart,必须依赖浏览器控件,资源占用比较高,后面决定采用改造QCustomPlot来实现用户需要的各种图表效果。

在整个改造的过程中,全部封装成易用的函数,传入参数即可,同时还支持全局样式更改,支持样式表控制整体颜色更改,考虑了很多细节,比如弹出悬停信息的位置等,都自动计算显示在最佳最合理位置。考虑到很多人用的QCustomPlot1.0,特意还做了QCustomPlot1.0和2.0的完全兼容。

二、实现的功能

* 1:可设置X轴Y轴范围值

* 2:可设置背景颜色+文本颜色+网格颜色

* 3:可设置三条曲线颜色+颜色集合

* 4:可设置是否显示定位十字线,可分别设置横向和纵向

* 5:可设置十字线的宽度和颜色

* 6:可设置是否显示数据点以及数据点的大小

* 7:可设置是否填充背景形成面积图

* 8:可设置模式-拖动+缩放等

* 9:可设置坐标轴间距+第二坐标系可见

* 10:提供接口setDataLine直接设置曲线,支持多条

* 11:提供接口setDataBar直接设置柱状图,支持多条形成堆积图

* 12:提供接口setLabs设置文本标签替代key

* 13:提供清空+重绘接口+外部获取QCustomPlot对象

* 14:提供函数start+stop来模拟正弦曲线

* 15:可设置柱状图的值的位置+精确度+颜色

* 16:支持鼠标移动到数据点高亮显示数据点以及显示数据提示信息

* 17:可设置提示信息位置 自动处理+顶部+右上角+右侧+右下角+底部+左下角+左侧+左上角

* 18:可设置是否校验数据产生不同的背景颜色,比如柱状图的每根柱子都可以根据数据生成不同背景颜色

* 19:可设置是否显示图例+图例位置+图例行数

* 20:支持多条曲线+柱状图+柱状分组图+横向柱状图+横向柱状分组图+柱状堆积图

* 21:内置15套精美颜色,自动取颜色集合的颜色,省去配色的烦恼

* 22:同时支持 QCustomPlot 1.0 和 QCustomPlot 2.0

三、效果图

f0421c7b9b727f5c87e60533dee9acfd.gif
a182b312e5935d393aaf3171f7549e26.gif

四、核心代码

void CustomPlot::setDataLine(int index, const QString &name, const QVector &key, const QVector &value){ if (customPlot->graphCount() > index) { customPlot->graph(index)->setName(name); customPlot->graph(index)->setData(key, value); customPlot->xAxis->setRange(-o
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中的setViewport方法可以用于设置QAbstractScrollArea和QGraphicsView的视口大小和位置。它通常与setWidget或setScene方法一起使用以创建可滚动视图。 如果你想要使用setViewport实现缩放,你需要考虑以下几点: 1. 首先,你需要确定视口的大小和位置。 2. 然后,你需要确定如何缩放视口中的内容。你可以使用QTransform类的scale方法来缩放内容。 3. 最后,你需要将缩放后的内容设置为视口的widget或scene。 下面是一个使用setViewport实现缩放的示例代码片段: ``` QGraphicsView *view = new QGraphicsView(this); view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); view->setRenderHint(QPainter::Antialiasing); view->setDragMode(QGraphicsView::ScrollHandDrag); view->setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing); view->setInteractive(true); view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QGraphicsScene *scene = new QGraphicsScene(view); view->setScene(scene); QPixmap pixmap(":/images/image.png"); QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap); scene->addItem(item); QTransform transform; transform.scale(2, 2); item->setTransform(transform); view->setSceneRect(item->boundingRect()); ``` 在这个例子中,我们使用QGraphicsView创建了一个视口,并为其设置了一些属性。然后,我们创建了一个QGraphicsScene,并将其设置为视口的scene。接下来,我们创建了一个QGraphicsPixmapItem,并将其添加到场景中。最后,我们使用QTransform类的scale方法将QGraphicsPixmapItem缩放了两倍,并将其设置为场景的边界矩形。 请注意,这只是一个简单的示例,实际上实现缩放可能需要更多的代码。同时,缩放可能会使内容变得模糊或失真,因此你需要找到一个合适的缩放比例来平衡视觉效果和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值