Qt中如何隐藏QBarCategoryAxis中的一些类别
How to hide some of the categories in QBarCategoryAxis in Qt
创建图表时,我没有找到隐藏 QBarCategoryAxis
中某些类别的方法。如果我没有为轴指定类别,默认情况下类别将是从 1 到 QBarSet
大小。如果我指定类别,我如何才能只显示 axis.cs 中的某些类别。例如:如何在QBarCategoryAxis
中只显示第一个和最后一个类别以及中间的类别?
编辑:
目前我得到的是这样的:
我有一个 QBarSet
有 6 个元素。而且我没有设置类别文本,所以默认情况下这些类别文本是从1到6。我想要的是显示一些类别文本,比如只显示1、3、6和其余文本(2 , 4, 5) 被隐藏了。
为什么我要这样做?
因为当QBarSet
元素比较多的时候,我自己指定类目文字的时候,通常我需要最大化window,这样才能看到axisX中显示的所有类目文字。但我只希望图表具有固定大小,所以对于文本,我只希望显示其中的一部分。
顺便说一句,如果一个条形集有很多元素,这将是这样的,并且在我最大化 window 之前,下面的文本将不会完整显示。
编辑 2:
这就是我想要的我希望图表看起来像:
如您所见,在x轴下方,只有5个文本。
以下解决方案仅适用于您希望在 X 轴上显示日期的情况。诀窍是使用 QDateTimeAxis
但要做到这一点,创建一个虚构的 QLineSeries
将具有日期和其他任何值作为值,然后它将隐藏。
#include <QApplication>
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QChartView w;
QBarSet *set0 = new QBarSet("bar1");
*set0 << 1 << 4 << 3 << 7 << 2 << 5 << 1 << 3 << 3 << 2 << 1 << 6 << 7 << 5;
QDateTime from = QDateTime::currentDateTime();
QLineSeries *ls = new QLineSeries; //fictitious series
for(int i=0; i < set0->count(); i++){
*ls << QPointF(from.addDays(i+1).toMSecsSinceEpoch(), 0);
}
QBarSeries *series = new QBarSeries;
series->append(set0);
QDateTimeAxis *axisX = new QDateTimeAxis;
axisX->setFormat("MMMM dd");
axisX->setGridLineVisible(false);
QValueAxis *axisY = new QValueAxis;
QChart *chart= new QChart;
w.setChart(chart);
chart->addSeries(series);
chart->addSeries(ls);
chart->setAxisX(axisX, ls);
chart->setAxisY(axisY, series);
ls->hide(); // hide serie
w.show();
return a.exec();
}
创建图表时,我没有找到隐藏 QBarCategoryAxis
中某些类别的方法。如果我没有为轴指定类别,默认情况下类别将是从 1 到 QBarSet
大小。如果我指定类别,我如何才能只显示 axis.cs 中的某些类别。例如:如何在QBarCategoryAxis
中只显示第一个和最后一个类别以及中间的类别?
编辑:
目前我得到的是这样的:
我有一个 QBarSet
有 6 个元素。而且我没有设置类别文本,所以默认情况下这些类别文本是从1到6。我想要的是显示一些类别文本,比如只显示1、3、6和其余文本(2 , 4, 5) 被隐藏了。
为什么我要这样做?
因为当QBarSet
元素比较多的时候,我自己指定类目文字的时候,通常我需要最大化window,这样才能看到axisX中显示的所有类目文字。但我只希望图表具有固定大小,所以对于文本,我只希望显示其中的一部分。
顺便说一句,如果一个条形集有很多元素,这将是这样的,并且在我最大化 window 之前,下面的文本将不会完整显示。
编辑 2:
这就是我想要的我希望图表看起来像:
如您所见,在x轴下方,只有5个文本。
以下解决方案仅适用于您希望在 X 轴上显示日期的情况。诀窍是使用 QDateTimeAxis
但要做到这一点,创建一个虚构的 QLineSeries
将具有日期和其他任何值作为值,然后它将隐藏。
#include <QApplication>
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QChartView w;
QBarSet *set0 = new QBarSet("bar1");
*set0 << 1 << 4 << 3 << 7 << 2 << 5 << 1 << 3 << 3 << 2 << 1 << 6 << 7 << 5;
QDateTime from = QDateTime::currentDateTime();
QLineSeries *ls = new QLineSeries; //fictitious series
for(int i=0; i < set0->count(); i++){
*ls << QPointF(from.addDays(i+1).toMSecsSinceEpoch(), 0);
}
QBarSeries *series = new QBarSeries;
series->append(set0);
QDateTimeAxis *axisX = new QDateTimeAxis;
axisX->setFormat("MMMM dd");
axisX->setGridLineVisible(false);
QValueAxis *axisY = new QValueAxis;
QChart *chart= new QChart;
w.setChart(chart);
chart->addSeries(series);
chart->addSeries(ls);
chart->setAxisX(axisX, ls);
chart->setAxisY(axisY, series);
ls->hide(); // hide serie
w.show();
return a.exec();
}