QObject *artistLabel = rootItem->findChildren("artistLabel");
artistLabel->setProperty("text", m_currentSong->artist);
...
QObject *nextButton = rootItem->findChildren("nextButton");
connect(nextButton, SIGNAL(clicked()), this, &MusicPlayer::nextSong);
QObject *musicPlayer = nextButton->parent();
QMetaObject::invokeMethod(musicPlayer, "startAnimation", Q_ARG(QVariant, duration));
Text {
text: musicPlayer.currentSong.artist
}
Button {
onClicked: musicPlayer.nextSong()
}
Slider {
value: musicPlayer.volume
}
class MusicPlayer : public QObject {
Q_INVOKABLE void setVolume(int volume) {
m_backend->setVolume(volume);
}
}
property int volume: 50
Slider {
value: volume
onRightPressed: {
volume = Math.min(100, volume + 5);
musicPlayer.setVolume(volume);
}
}
class MusicPlayer : public QObject {
Q_PROPERTY(int volume READ volume NOTIFY ...)
public:
int volume() const { return m_volume; }
Q_INVOKABLE void increaseVolume() {
m_volume = qMin(100, volume + 5);
m_backend->setVolume(m_volume);
}
private:
int m_volume = EAR_BLEEDING_LOUD;
}
Slider {
value: musicPlayer.volume
onRightPressed: musicPlayer.increaseVolume()
}
2020.06.23 10:50
2020.06.23 12:13
어떤 데이터를 QML로 직접 다루는 것이아니라 UI 즉 QML로는 Invoke 역할을 하는 것이죠.. QML에서 데이터를 다루는 것은 반응성 및 성능면에서 좋지않을 것입니다.
2021.11.10 09:17
이해가 확 되네요. 좋은 자료 감사합니다
QML이 화면 구성의 역할만 하는것이 아니고 cpp의 동작 함수들을 컨트롤 하는것이 좋은것인가요??