c++ 与 qml 信号槽交互之 c++对象信号触发qml函数

预览:

双击qml的model 实现音乐播放以及歌曲信息,播放进度

c++ 与 qml 信号槽交互之 c++对象信号触发qml函数_第1张图片


一、设置上下文属性,使c++类对象能够被qml调用

Player mPlayer;
engine.rootContext()->setContextProperty("Player",&mPlayer);

二、在player类中增加信号函数

signals:
    void currentPositionChanged(QString);
    void updateTotalTime(int);
    void musicChanged(QString);

三、在qml文件中关联qml的函数

    PlaySlider{
        id:sliderWindow
        anchors{
            left: stepForward.right
            leftMargin: 10*dp
            right: collectBtn.left
            rightMargin: 10*dp
            top:parent.top
            topMargin: 1*dp
            bottom: parent.bottom
            bottomMargin: 1*dp
        }
        function totalTime(time_){
            //console.log("totalTime: "+time_);
            sliderWindow.duringTime = time_;
        }
        function setCurrentMusic(musicName){
            //console.log("CurrentMusic: "+musicName);
            sliderWindow.musicName = musicName;
        }
        function setPosition(position_){
            sliderWindow.musicDuringText = position_;
            //console.log(Player.currentPosition);
            sliderWindow.currentPositionValue = (Player.currentPosition*100/sliderWindow.duringTime);
        }

        Component.onCompleted: {
            Player.updateTotalTime.connect(totalTime);
            Player.currentPositionChanged.connect(setPosition);
            Player.musicChanged.connect(setCurrentMusic);
        }
    }


四、当player的信号发送时,就能触发qml 的函数。


qml之从零开始编写网易云音乐目录


你可能感兴趣的:(qml,c++)