Как скрыть некоторые категории в QBarCategoryAxis в Qt

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

Редактировать:
В настоящее время я получаю вот так:введите описание изображения здесь

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

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

Изменить 2:
Это то, что я хочу, чтобы график выглядел так:введите описание изображения здесь

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

1

Решение

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

введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]