Qt - Как добавить полосу прокрутки для оси x большого QBarChart - PullRequest
0 голосов
/ 07 октября 2018

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

enter image description here

И вот код, который я написал:

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() делает его больше, но без полос прокрутки, и я вижу только часть графика.

...