首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为大型xAxis的QBarChart添加滚动条

如何为大型xAxis的QBarChart添加滚动条
EN

Stack Overflow用户
提问于 2018-10-07 07:22:01
回答 1查看 482关注 0票数 1

我正在用灰度图像中每个像素的计数来制作直方图。这意味着我的条形图上有255条。它看起来像下面,我不能让它扩张。

这就是我写的代码:

代码语言:javascript
复制
Histogram::Histogram()
{
    ui = std::make_unique<Ui_GraphWindow>();
    ui->setupUi(this);
    setAttribute(Qt::WA_DeleteOnClose, true); // delete the object after the window is closed


    ui->chartView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    ui->chartView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);        
}

void Histogram::display(QImage * image)
{
    show();

    std::map<size_t, size_t> colorCount;    
    for (int i = 0; i < 256; i++) {
        colorCount[i] = 0;
    }

    for (int i = 0; i < image->width(); i++) {
        for (int j = 0; j < image->height(); j++) {
            auto val = qGray(image->pixel(i, j));
            colorCount[val]++;
        }
    }
    QStringList categories;


    std::vector<QBarSet*> sets(colorCount.size());
    QBarSeries *series = new QBarSeries();

    for (int i = 0; i < colorCount.size(); i++) {
        sets[i] = new QBarSet(std::to_string(i).c_str());

        *sets[i] << colorCount[i];
        sets[i]->setColor(QColor(i, i, i));
        sets[i]->setBorderColor(QColor(255, 255, 255));
        series->append(sets[i]);
    }

    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->setTitle("Simple barchart example");
    chart->setAnimationOptions(QChart::SeriesAnimations);

    QBarCategoryAxis *axis = new QBarCategoryAxis();
    chart->createDefaultAxes();
    axis->append(categories);
    chart->setAxisX(axis, series);

    chart->legend()->setVisible(false);
    ui->chartView->setChart(chart);
    ui->chartView->setRenderHint(QPainter::Antialiasing);
}

即使我添加了滚动条,它也不起作用。我想要能够水平滚动。我试着使用zoomIn(),但它没有工作,scale()确实使它更大,但是没有滚动条出现,我只能看到图表的一部分。

EN

回答 1

Stack Overflow用户

发布于 2022-10-27 05:49:55

代码语言:javascript
复制
chart->legend()->setVisible(false);
ui->chartView->setRenderHint(QPainter::Antialiasing);
// the magic is done with setRubberBand()
chartView->setRubberBand(QChartView::HorizontalRubberBand);
ui->chartView->setChart(chart); //try this if the other one does not work with your version of qt:  chartView->setParent(ui->histoPlot);

如果按下鼠标左键并启用橡皮筋,.橡皮筋显示在屏幕上。这使用户能够使用鼠标真正选择缩放区域。看看我在这里的意思,动作结果 --如何回到我们所选择的未扩展的主要区域?只需按几次鼠标的严格按钮。

此外,如果添加更多关于X轴的详细信息,它将更具可读性:

代码语言:javascript
复制
axisX = new QValueAxis();
chart->addAxis(axisX, Qt::AlignBottom); // Add a horizontal X axis at the bottom of the chart
    barseries->attachAxis(axisX);
    axisX->applyNiceNumbers();
          
// Setting Range to be precise of making the whole data visible
    axisX->setRange(0,256); // because you have a histogram
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52686324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档