m0_37670973 2024-09-24 19:57 采纳率: 16.7%
浏览 7
已结题

QChart画大量横向叠加柱状图时,颜色变为白色

QChart画大量横向叠加柱状图时,颜色变为白色
使用QChart画柱状图,大约1000根,展示时,柱子都变成了白色,如何解决。
参考图如下:

img

QColor GREEN = QColor(0, 230, 0);
QColor RED = QColor(255, 50, 50);

// 创建一个颜色轴对象
QColorAxis *axis = new QColorAxis;

QVector<QColor> colors;
colors << RED << GREEN;

set0->setBrush(QBrush(GREEN, Qt::SolidPattern));
set1->setBrush(QBrush(RED, Qt::SolidPattern));

QHorizontalStackedBarSeries *series = new QHorizontalStackedBarSeries();

for(int i=0; i < 1000; i++) {
    *set0 << 1 + QRandomGenerator::global()->bounded(4.1);
    *set1 << 2+ QRandomGenerator::global()->bounded(1.1);
}


series->append(set0);
series->append(set1);

series->setUseOpenGL(true);

connect(series, SIGNAL(hovered(bool, int, QBarSet*)), this, SLOT(sltTooltip(bool, int, QBarSet*)));

QChart *chart = new QChart();

chart->addSeries(series);
chart->setTitle("Simple horizontal stacked barchart example");
chart->setAnimationOptions(QChart::SeriesAnimations);
chart->setBackgroundBrush(QBrush(QColor(0, 0, 0)));

QStringList categories;
for(int i=0; i< 1000; i++) {
    categories << "Jane" + QString::number(i);
}

QBarCategoryAxis *axisY = new QBarCategoryAxis();
axisY->append(categories);
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);
QValueAxis *axisX = new QValueAxis();

chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);

chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);

QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->setStyleSheet("background-color:black");

问题已解决,代码如下:

img

QColor GREEN = QColor(0, 230, 0);
QColor RED = QColor(255, 50, 50);

QHorizontalStackedBarSeries *series = new QHorizontalStackedBarSeries();
series->setBarWidth(0.5);

for(int i=0; i < 1000; i++) {
    *set0 << 1 + QRandomGenerator::global()->bounded(4.1);
    *set1 << 2+ QRandomGenerator::global()->bounded(1.1);
}

series->append(set0);
series->append(set1);

set0->setColor(GREEN);
set1->setColor(RED);
set0->setBorderColor(GREEN);
set1->setBorderColor(RED);


series->setUseOpenGL(true);

connect(series, SIGNAL(hovered(bool, int, QBarSet*)), this, SLOT(sltTooltip(bool, int, QBarSet*)));

QChart *chart = new QChart();

chart->addSeries(series);
chart->setTitle("Simple horizontal stacked barchart example");
chart->setAnimationOptions(QChart::SeriesAnimations);

QStringList categories;
for(int i=0; i< 1000; i++) {
    categories << "Jane" + QString::number(i);
}

QBarCategoryAxis *axisY = new QBarCategoryAxis();
axisY->append(categories);
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);
QValueAxis *axisX = new QValueAxis();

chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);

chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);


QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->setStyleSheet("background-color:black");
  • 写回答

10条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-09-25 09:54
    关注

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    首先,在构建柱状图时,可以通过设置柱子的宽度和颜色来控制其大小。当使用QCHART绘制柱状图时,通常需要在PLOTLEGEND方法中指定柱子的样式(如QPLOTITEM::MARKERSTYLE),以确定柱子的大小。如果希望所有柱子都被填充为白色,可以尝试以下步骤:

    1. 在绘图区域中添加一个矩形作为背景。
    2. 设置PLOTLEGEND方法中的MARKERSTYLE属性,使其为QLINESYMBOL
    3. 使用SETPEN()方法设置柱子的颜色,使其变为白色。
    QCHART CHART;
    // 建立绘图区域
    CHART.ADDSERIES("SERIES");
    
    // 创建柱状图
    CONST INT NUMPOINTS = 1000; // 柱子数量
    QPOINT P(NUMPOINTS * 2, 5); // 初始点位置
    QPAINTER PAINTER(&CHART);
    PAINTER.SETPEN(QT::BLACK);
    
    // 绘制柱状图
    FOR (INT I = 0; I < NUMPOINTS; ++I) {
        CONST DOUBLE X = P.X() + I / NUMPOINTS * (P.WIDTH() - 2);
        CONST DOUBLE Y = P.Y() + I / NUMPOINTS * (P.HEIGHT() - 2);
        QLINEF LINE(X, Y, X, Y + 4);
        PAINTER.DRAWELLIPSE(LINE);
    }
    
    // 显示柱状图
    CHART.PLOTLEGEND(QCHART::BOTTOMLEFTCORNER);
    CHART.SHOW();
    

    这段代码将创建一个1000个柱状图,并将其填充为白色,从而使所有柱子都被覆盖。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月25日
  • 修改了问题 9月25日
  • 赞助了问题酬金20元 9月25日
  • 创建了问题 9月24日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?