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의 동작 함수들을 컨트롤 하는것이 좋은것인가요??