【问题标题】:Referring to a predefined QMediaPlayer引用预定义的 QMediaPlayer
【发布时间】:2014-05-05 10:03:53
【问题描述】:

您好,我今年仍在为我在学校的主要项目学习 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();
}

这两个功能(如果是这样的话)都是从按下按钮开始的,我知道它适用于第一个。

【问题讨论】:

    标签: c++ qt qt-signals qmediaplayer qtmultimedia


    【解决方案1】:

    您正试图在此处访问不可访问的对象:

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

    话虽如此,在这种情况下您可能根本不需要堆对象,并且您可以开始使用堆栈对象而无需动态内存分配。

    【讨论】:

    • @Kinexd:当然,您必须在标头中添加#include QMediaPlayer 或在类声明前添加class QMediaPlayer;,并将其包含在源代码中。
    • 抱歉,我在尝试您的解决方案时遇到了很多错误,这让我很困惑。所以在void MainWindow::playAudioFile() 里面我把QMediaPlayer *player = new QMediaPlayer(this); 改成了player = new QMediaPlayer(this);。然后在 MainWindow 类中,我将其更改为您的放置方式。
    • @Kinexd:仅供参考,这不是 Qt 问题,而是通用 C++。我建议阅读 C++ 中的类。了解成员的工作方式很重要。
    • 我真的很想学习更多 C++,正如你所知道的,我知道的不多。你会推荐任何可以帮助我学习 C++ 的东西吗?
    • @Kinexd:我将答案更新为可复制/可粘贴,但请查看at the recommended books
    猜你喜欢
    • 2016-02-23
    • 2015-08-29
    • 2019-06-23
    • 1970-01-01
    • 2014-02-19
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多