Ссылаясь на предопределенный 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, который называется «плеер», и на данный момент все, о чем я думал, это это, и я не уверен, что делаю это правильно:

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

Обе эти функции (если они так называются) начинаются с нажатия кнопки, что, как я знаю, работает для первой.


person Kinexd    schedule 05.05.2014    source источник


Ответы (1)


Вы пытаетесь получить доступ к недоступному объекту здесь:

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

Я удивлен, если он даже компилировался для вас. Решением было бы изменить это:

QMediaPlayer *player = new QMediaPlayer(this);

to

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;
}

При этом вам может вообще не понадобиться объект кучи в этом случае, и вы можете начать использовать объект стека без динамического выделения памяти.

person lpapp    schedule 05.05.2014
comment
@Kinexd: конечно, вы должны сделать либо #include QMediaPlayer в заголовке, либо class QMediaPlayer; перед объявлением класса и включить его в исходный код. - person lpapp; 05.05.2014
comment
Извините, но я получаю много ошибок, пытаясь использовать ваше решение, и это меня смущает. Итак, внутри void MainWindow::playAudioFile() я изменил QMediaPlayer *player = new QMediaPlayer(this); на player = new QMediaPlayer(this);. Затем в классе MainWindow я изменил его на то, как вы выразились. - person Kinexd; 05.05.2014
comment
@Kinexd: к вашему сведению, это не проблема Qt, а общий C++. Я бы посоветовал прочитать классы на С++. Важно знать, как работают участники. - person lpapp; 05.05.2014
comment
Я действительно хочу больше узнать о С++, так как вы можете сказать, что я мало что знаю. Не могли бы вы порекомендовать что-нибудь, что поможет мне изучить C++ для моих целей? - person Kinexd; 05.05.2014
comment
@Kinexd: я обновил ответ, чтобы его можно было копировать/вставлять, но, пожалуйста, взгляните в рекомендованных книгах. - person lpapp; 05.05.2014