Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QCharts
折线图的常用方法及灵活运用。
在上一篇文章中笔者介绍了关于QCharts
绘图组件的详细使用方法及接口,本章将继续为绘图组件绑定事件,通常在未绑定事件的图形上所有的元素都是被禁用状态的,我们无法直接操作这些功能,通过绑定图形组件事件将可以实现对图形的各种操作模式,例如可以控制图形的大小,控制线条的显示与消除等。
首先,我们来实现动态显示与隐藏线条功能,还是使用之前的代码这里稍作改进增加一个十五分钟负载统计,接着我们在MainWindow
主构造函数中通过markers()
得到所有的标签,然后先调用disconnect()
断开信号的连接,接着在使用connect()
将当前上方三个按钮进行绑定,当按钮被点击则会触发on_LegendMarkerClicked()
槽函数;
// 图例被点击后触发
foreach (QLegendMarker* marker, chart->legend()->markers())
{
QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked()));
QObject::connect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked()));
}
接着,我们需要来实现on_LegendMarkerClicked()
槽函数的功能,这里需要介绍一个类,QLegendMarker
类是 Qt Charts 模块中用于表示图例标记的基类。这个类有几个派生类,每个派生类代表一种类型的图例标记。
以下是一些常见的派生类:
QLegendMarker::LegendMarkerTypeXY
:
QLegendMarker::LegendMarkerTypeBar
:
QLegendMarker::LegendMarkerTypePieSlice
:
QLegendMarker::LegendMarkerTypeArea
:
这些类型分别对应于不同种类的数据系列,因为不同类型的数据系列可能需要不同的图例标记。当你处理 QLegendMarker
的点击事件时,通过检查标记的类型,你可以判断点击的是哪一种类型的图例标记,并作出相应的处理,比如切换数据系列的可见性。
// 在槽函数中获取图例标记的类型
void MainWindow::on_LegendMarkerClicked()
{
QLegendMarker* marker = qobject_cast<QLegendMarker*>(sender());
// 获取图例标记的类型
QLegendMarker::LegendMarkerType type = marker->type();
// 根据标记的类型执行相应的操作
switch (type)
{
case QLegendMarker::LegendMarkerTypeXY:
// 处理 XY 数据系列的图例标记
break;
case QLegendMarker::LegendMarkerTypeBar:
// 处理柱状图数据系列的图例标记
break;
case QLegendMarker::LegendMarkerTypePieSlice:
// 处理饼图数据系列的图例标记
break;
case QLegendMarker::LegendMarkerTypeAr