Я пытаюсь понять, как контролировать количество блоков (или наборов блоков) в диаграмме с помощью диаграммы Qt и использовать полосу прокрутки для прокрутки всей диаграммы. Это похоже на этот пример (http://www.advsofteng.com/doc/cdcppdoc/zoomscrolltrackqt.htm).
Приведенный ниже код — это то, что я сделал, и он заполняет все поля в представлении диаграммы, независимо от их количества. Я выбрал «ScrollBarAsNeeded» для политик вертикальной и горизонтальной полосы прокрутки в конструкторе Qt.
главное окно.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QChartView>
#include <QBoxPlotSeries>
#include <QBoxSet>
#include <QValueAxis>
#include <QBarCategoryAxis>
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlQuery>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("192.168.2.103");
db.setPort(5433);
db.setUserName("vorlket");
db.setPassword("K1156312j");
db.setDatabaseName("fxproj");
QBoxPlotSeries *bidaskSeries = new QBoxPlotSeries(this);
bidaskSeries->setName("bidask");
QStringList categories;
if (db.open())
{
QSqlQuery query;
if (query.exec("SELECT EXTRACT(YEAR FROM month), EXTRACT(MONTH FROM month), bid_low, bid_lowquartile, bid_median, bid_upquartile, bid_high FROM audusd.ts_month_quotebid ORDER BY month"))
{
while (query.next())
{
categories << query.value(0).toString() + "-" + query.value(1).toString();
QBoxSet *set = new QBoxSet();
set->setValue(QBoxSet::LowerExtreme, query.value(2).toDouble());
set->setValue(QBoxSet::LowerQuartile, query.value(3).toDouble());
set->setValue(QBoxSet::Median, query.value(4).toDouble());
set->setValue(QBoxSet::UpperQuartile, query.value(5).toDouble());
set->setValue(QBoxSet::UpperExtreme, query.value(6).toDouble());
bidaskSeries->append(set);
}
}
db.close();
}
QChart *chart = new QChart();
chart->legend()->hide();
chart->addSeries(bidaskSeries);
QBarCategoryAxis * axisX = new QBarCategoryAxis();
axisX->append(categories);
chart->addAxis(axisX, Qt::AlignBottom);
chart->setAxisX(axisX, bidaskSeries);
QValueAxis *axisY = new QValueAxis();
chart->addAxis(axisY, Qt::AlignLeft);
chart->setAxisY(axisY, bidaskSeries);
axisY->setRange(0.65, 1.15);
ui->chartview->setChart(chart);
ui->chartview->setRenderHint(QPainter::Antialiasing);
}
MainWindow::~MainWindow()
{
delete ui;
}