안녕하세요.
main.cpp 외에 a.cpp, a.qml 을 만들었고 stackview 를 통해서 a.qml 로 화면전환이 이루어지게 구성하였습니다.
시그널과 슬롯 connection을 통해서 c++의 데이터를 qml에 전달하는데 성공을 했는데요.
c++에서 qml의 id를 얻어와서 c++ 내에서 데이터를 처리하고 qml에 반영할 수 있는 방법이 없을까요.
현재 qml에서 Qt Chart 를 하나 붙이고, 시리얼로 데이터를 입력받아 차트에 append 시키고 있습니다.
c++에서 시리얼 데이터를 입력 받아서 시그널과 슬롯을 이용해
qml 의 connection으로 수신받은 데이터를 qml에 전달하고 그 데이터를 qml에서 차트에 append 시키고 있습니다.
제가 찾고 있는 방법은 c++ 에서 직접 차트에 append 시키고 싶습니다.
그러려면 현재 보여지고 있는 화면의 qml 을 c++에서 얻어와서 qml 내의 오브젝트 네임이나 아이디를 획득해야 하는데 방법을 잘모르겠습니다.
main.cpp 외에 다른 클래스 파일에서 qml 아이드를 얻어오는 방법에 대해 조언을 구합니다.
감사합니다.
qml 인스턴스를 C++에서 먼저 접근하는 것보다 데이터가 준비된것을 qml 쪽에 알리고 qml 에서 챠트 인스턴스를 C++ 에 전달하여 append 해보세요. 아니면 아래 예제 처럼 qml 에서 타이머가 트리거 되면 업데이트 요청을 해도 되구요.
QML
ChartView {
id: chartView
...
Timer {
id: refreshTimer
interval: 1 / 60 * 1000 // 60 Hz
running: true
repeat: true
onTriggered: {
dataSource.update(chartView.series(0));
dataSource.update(chartView.series(1));
}
}
...
}
Cpp
void DataSource::update(QAbstractSeries *series)
{
if (series) {
QXYSeries *xySeries = static_cast<QXYSeries *>(series);
m_index++;
if (m_index > m_data.count() - 1)
m_index = 0;
QVector<QPointF> points = m_data.at(m_index);
// Use replace instead of clear + append, it's optimized for performance
xySeries->replace(points);
}
}