8

QtChartsを使用しています。

値を追加した後、両方の軸を再スケーリングする必要があります。追加した値は 0 から 1 の間ではなく、1970 年のものでもありません。

QtChart軸が間違ってスケーリングされました

ダイアログのコンストラクター コードは次のようになります。

m_series = new QLineSeries;
m_series->setName(name);

auto chart = new QChart;
chart->legend()->setVisible(false);
chart->addSeries(m_series);

m_axisX = new QDateTimeAxis;
//m_axisX->setFormat("HH:mm:ss");
m_axisX->setTitleText(tr("Zeitpunkt"));
chart->addAxis(m_axisX, Qt::AlignBottom);

m_series->attachAxis(m_axisX);

auto axisY = new QValueAxis;
axisY->setTitleText(unit);
chart->addAxis(axisY, Qt::AlignLeft);

m_series->attachAxis(axisY);

auto chartView = new QChartView(chart, this);
chartView->setRenderHint(QPainter::Antialiasing);

私の MainWindow は、新しい値を含むシグナルを発します。複数の開いているチャート ダイアログがそのシグナルに接続されています。

void ChartDialog::liveUpdate(const RealTimeMeasureRegisters &registers)
{
    auto result = ((&registers)->*m_methodPtr)();

    m_series->append(registers.timestamp(), result);
}

QDateTimeAxis (私の場合m_axisX) に新しい値に自動的に調整するように指示する簡単な方法はありますか?

QDateTimeAxis::setRange()は見栄えがよくありません。最小値と最大値を設定する必要があるためです。

4

3 に答える 3

1

自動的に調整する方法はわかりませんが、チャートにポイントを動的に追加するこの例を見ることができます: http://doc.qt.io/qt-5/qtcharts-dynamicspline-example.html

この例では、ポイントを追加するときに範囲が制限されているため、さらに先に進むには、次のポイントが範囲外になったときに範囲を再調整する必要があります。

あなたが言うように、setRange には最小値と最大値が必要ですが、liveUpdate で更新できます。

于 2016-12-28T09:41:18.833 に答える