Как скрыть некоторые категории в QBarCategoryAxis в Qt - PullRequest
0 голосов
/ 20 мая 2018

Я не нашел способа скрыть некоторые категории в QBarCategoryAxis при создании диаграммы.Если я не укажу категорию для оси, по умолчанию категории будут иметь размер от 1 до QBarSet.Если я указываю категорию, как я могу отображать только некоторые категории по оси.Например: как отобразить только первую и последнюю категории и категорию в середине в QBarCategoryAxis?

Редактировать:
В настоящее время я получаю следующее: enter image description here

У меня есть один QBarSet, который имеет 6 элементов,И я не установил текст категории, поэтому по умолчанию эти тексты категорий имеют значение от 1 до 6. Я хочу, чтобы некоторые тексты категорий отображались, например, отображались только 1, 3, 6 и остальной текст (2, 4, 5) скрыты.

Почему я хочу это сделать?
Потому что, когда QBarSet имеет больше элементов и когда я сам задаю текст категории, обычноМне нужно развернуть окно, чтобы я мог видеть все тексты категорий, которые отображаются на оси X.Но я просто хочу, чтобы диаграмма имела фиксированный размер, поэтому для текстов я просто хочу, чтобы часть из них отображалась.
Кстати, это будет выглядеть так, если в наборе баров много элементов, а тексты ниже не будут отображаться полностью, пока я не разверну окно.enter image description here
Редактировать 2:
Это то, что я хочу, я хочу, чтобы график выглядел так: enter image description here

Как вы можете видеть, под осью х у него всего 5 текстов.

1 Ответ

0 голосов
/ 20 мая 2018

Следующее решение работает только для случая, когда вы хотите отобразить даты на оси 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();
}

enter image description here

...