0

Qtチャートでボックスプロットのボックス(またはボックスセット)の数を制御し、スクロールバーを使用してチャート全体をスクロールする方法を見つけようとしています。この例 ( http://www.advsofteng.com/doc/cdcppdoc/zoomscrolltrackqt.htm ) に似ています。

以下のコードは私が行ったもので、チャートビューのすべてのボックスにいくつでも入力します。Qt デザイナーの垂直および水平スクロール バー ポリシーに「ScrollBarAsNeeded」を選択しました。

ここに画像の説明を入力

メインウィンドウ.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;
}
4

1 に答える 1

0

QChartView の代わりに QGraphicsScene を使用する必要があるかもしれません。

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 ウィジェットを使用すると、シーン全体を視覚化することも、ズームインしてシーンの一部のみを表示することもできます。

于 2016-10-31T04:09:18.770 に答える