728x90
Qt 데이터 시각화 도구 QCustomPlot 사용하기(2)를 안보셨다면 먼저 보시는 것을 추천드립니다.
다음으로 데이터를 100ms 마다 추가할 때 그래프를 옆으로 옮겨보겠습니다.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
nIndex = 0;
...
connect(ui->pbStop, SIGNAL(clicked()), &timer, SLOT(stop()));
qsrand(QTime::currentTime().msec());
connect(&timer, SIGNAL(timeout()),this,SLOT(Slot_addData()));
timer.start(100);
ui->plot->replot();
}
void MainWindow::Slot_addData()
{
int nRand = qrand() % 11;
ui->plot->graph(0)->addData(nIndex++, nRand);
if ( nIndex >= 20 ) {
ui->plot->xAxis->moveRange(1);
}
ui->plot->replot();
}
100 ms마다 데이터가 추가되고 추가 종료 버튼을 누르면 타이머가 종료됩니다.
이전 데이터를 보거나 드래그를 통해 확대 / 축소 등의 기능을 plot에 추가하고 싶을때는 setInteractions을 통해 설정하면 됩니다.
드래그, 줌, 그래프 선택, 축 선택, 범례 선택 옵션을 추가했습니다.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
...
ui->plot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom |
QCP::iSelectPlottables | QCP::iSelectAxes | QCP::iSelectLegend);
ui->plot->replot();
}
- 레이어
qcustomPlot에는 레이어 개념이 적용되어 있습니다. 현재 레이어는 총 8가지 입니다. 아래 코드는 qcustomplot.cpp의 일부입니다.
mLayers.append(new QCPLayer(this, QLatin1String("background")));
mLayers.append(new QCPLayer(this, QLatin1String("grid")));
mLayers.append(new QCPLayer(this, QLatin1String("main")));
mLayers.append(new QCPLayer(this, QLatin1String("axes")));
mLayers.append(new QCPLayer(this, QLatin1String("graph")));
mLayers.append(new QCPLayer(this, QLatin1String("selectedgraph")));
mLayers.append(new QCPLayer(this, QLatin1String("legend")));
mLayers.append(new QCPLayer(this, QLatin1String("overlay")));
좌표 설명을 해주는 QItemText처럼 overlay로 설정을 해준 아이템들을 통합적으로 관리를 할 수 있습니다.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
...
QCPItemText* itemText = new QCPItemText(ui->plot);
itemText->setLayer("overlay");
...
// m_ItemText->setVisible(false);
ui->plot->layer("overlay")->setVisible(false);
...
ui->plot->replot();
}
void MainWindow::Slot_clickGraph(QCPAbstractPlottable* potItem, int num, QMouseEvent* event)
{
double dX = potItem->interface1D()->dataMainKey(num);
double dY = potItem->interface1D()->dataMainValue(num);
// m_ItemText->setVisible(true);
ui->plot->layer("overlay")->setVisible(true);
m_ItemText->setText(QString("Point Information\nX = %1\nY = %2")
.arg(QString::number(dX)).arg(QString::number(dY)));
ui->plot->replot();
}
728x90
'Programming > Qt' 카테고리의 다른 글
Qt Creator FTH 에러 메시지 (0) | 2021.03.23 |
---|---|
Qt CSV 파일 입출력하기 (0) | 2021.02.18 |
Qt 데이터 시각화 도구 QCustomPlot 사용하기(2) (0) | 2021.02.17 |
Qt random 값 사용 (0) | 2021.02.17 |
Qt 데이터 시각화 도구 QCustomPlot 사용하기(1) (2) | 2021.02.17 |