簡體   English   中英

引用預定義的QMediaPlayer

[英]Referring to a predefined QMediaPlayer

嗨,我今年仍在為學校的主要項目學習C ++和QT,我希望獲得有關C ++語法和使用某些QT函數的幫助。 當我成為媒體經理時,我已經設法通過按下表單上的按鈕來播放歌曲。 現在,我想通過按下另一個按鈕來暫停同一首歌曲,但是我不確定要怎么做,您能幫上忙嗎?

我已經可以播放一首歌了:

void MainWindow::playAudioFile(){
    QMediaPlayer *player = new QMediaPlayer(this);
    player->setMedia(QUrl::fromLocalFile("LOCATION OF SONG FILE"));
    player->setVolume(50);
    player->play();
}   

但是我想知道如何從QMediaPlayer中暫停名為“ player”的同一個audioi文件,此刻我想到的只是這個,而且我不確定我是否做得正確:

void MainWindow::pauseAudioFile(){
    player->pause();
}

這兩個功能(如果就是這樣的話)都是從按鈕按下開始的,我知道這對第一個功能有效。

您嘗試在此處訪問不可訪問的對象:

void MainWindow::pauseAudioFile(){
    player->pause();
}

如果它甚至為您編譯,我感到很驚訝。 解決方案是更改此:

QMediaPlayer *player = new QMediaPlayer(this);

player = new QMediaPlayer(this);

其中“玩家”對象是MainWindow類的成員,因此基本上您可以將其放入MainWindow類:

#include <QMainWindow>
#include <QMediaPlayer>

class MainWindow : public QMainWindow
{
    Q_OBJECT
    public:
        explicit MainWindow(QObject *parent = 0)
            : QObject(parent)
            , player(new MediaPlayer(this))
    ...
    public slots:
        void playAudioFile() {
            player->setMedia(QUrl::fromLocalFile("LOCATION OF SONG FILE"));
            player->setVolume(50);
            player->play();
        }
        void pauseAudioFile(){
            player->pause();
        }
    private:
        QMediaPlayer *player;
}

話雖如此,在這種情況下,您可能根本不需要堆對象,並且可以開始使用沒有動態內存分配的堆棧對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM