我试图弄清楚如何使用Qt图表控制框图中的框(或框集)数量,并使用滚动条滚动整个图表。它与此示例类似(http://www.advsofteng.com/doc/cdcppdoc/zoomscrolltrackqt.htm)。
下面的代码就是我所做的,它填充了chartview中的所有框,无论多少。我选择了ScrollBarAsNeeded'对于Qt设计器中的垂直和水平滚动条策略。
mainwindow.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;
}
答案 0 :(得分:0)
也许我需要使用QGraphicsScene而不是QChartView。
http://doc.qt.io/qt-5/qchartview.html#details:
QChartView是一个可以显示图表的独立小部件。它不需要单独的QGraphicsScene工作。如果要在现有QGraphicsScene中显示图表,则需要使用QChart(或QPolarChart)类。
http://doc.qt.io/qt-5/qgraphicsscene.html#details:
QGraphicsScene类提供了一个用于管理大量2D图形项的表面。
该类充当QGraphicsItems的容器。它与QGraphicsView一起用于在2D表面上可视化图形项目,例如线条,矩形,文本甚至自定义项目。 QGraphicsScene是Graphics View Framework的一部分。
QGraphicsScene还提供了一些功能,可让您有效地确定项目的位置,以及确定哪些项目在场景中的任意区域内可见。使用QGraphicsView小部件,您既可以可视化整个场景,也可以放大并仅查看场景的一部分。