Изменение цвета текста для каждой метки в QCategoryAxis - PullRequest
0 голосов
/ 03 мая 2018

Есть ли способ назначить цвет для каждой метки в QCategoryAxis?

Я знаю, что могу иметь легенду, но я предпочитаю устанавливать цвета на оси так, чтобы они соответствовали цветам линий, которые у меня есть. Я хочу изменить цвет маркеров (текст категорий), а не галочки. Обратите внимание, что я хочу установить разные цвета для каждой метки оси.

Пробовал с помощью axisY.setLabelsBrush(QBrush(Qt::red)); Но это устанавливает одинаковый цвет для всех этикеток.

Использование Qt 5.10

1 Ответ

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

метки QCategoryAxis равны QGraphicsTextItem, поэтому они поддерживают HTML, поэтому вы можете передать цвет с помощью этого метода:

#include <QApplication>
#include <QMainWindow>
#include <QtCharts>

QT_CHARTS_USE_NAMESPACE

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QLineSeries *series = new QLineSeries();
    *series << QPointF(0, 6) << QPointF(9, 4) << QPointF(15, 20) << QPointF(25, 12) << QPointF(29, 26);
    QChart *chart = new QChart();
    chart->legend()->hide();
    chart->addSeries(series);

    QCategoryAxis *axisX = new QCategoryAxis();
    QCategoryAxis *axisY = new QCategoryAxis();

    // Customize axis label font
    QFont labelsFont;
    labelsFont.setPixelSize(12);
    axisX->setLabelsFont(labelsFont);
    axisY->setLabelsFont(labelsFont);

    // Customize axis colors
    QPen axisPen(QRgb(0xd18952));
    axisPen.setWidth(2);
    axisX->setLinePen(axisPen);
    axisY->setLinePen(axisPen);

    axisX->append("<span style=\"color: #339966;\">low</span>", 10);
    axisX->append("<span style=\"color: #330066;\">optimal</span>", 20);
    axisX->append("<span style=\"color: #55ff66;\">high</span>", 30);
    axisX->setRange(0, 30);

    axisY->append("<font color=\"red\">slow</font>", 10);
    axisY->append("<font color=\"green\">med</font>", 20);
    axisY->append("<span style=\"color: #ffff00;\">fast</span>", 30);
    axisY->setRange(0, 30);

    chart->setAxisX(axisX, series);
    chart->setAxisY(axisY, series);
    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);


    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(400, 300);
    window.show();

    return a.exec();
}

enter image description here

...