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

这就是我写的代码:
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()确实使它更大,但是没有滚动条出现,我只能看到图表的一部分。
发布于 2022-10-27 05:49:55
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轴的详细信息,它将更具可读性:
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 histogramhttps://stackoverflow.com/questions/52686324
复制相似问题