Ошибка медиа-объекта Qt phonon - PullRequest
0 голосов
/ 25 февраля 2011
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <Phonon/MediaSource>
#include <QUrl>
#include <Phonon/MediaObject>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QUrl url("http://www.example.com/music.ogg");
    Phonon::MediaObject *wow =
             Phonon::createPlayer(Phonon::NoCategory,
                                  Phonon::MediaSource(url));
         wow->play();

   }

Этот код не воспроизводит файл, и я получаю эту ошибку:

:: error: collect2: ld вернул 1 состояние выхода

Может ли кто-нибудь помочь мне воспроизвести файл, когда я нажму кнопку?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Я предполагаю, что в заголовочном файле объявлена ​​одна или несколько функций, но их тела еще не созданы.

, например:

//headerfile
class MyClass
{
    public: MyClass();
    private: void function1();
             void function2();
};

//source file
MyClass::MyClass(){}
void MyClass::function1(){ /*do something*/ }
//here function2 is missing.

Итак, пожалуйста, проверьте, чтовсе функции всего проекта имеют свои тела.

Для базового фононного медиаплеера,

#ifndef MYVIDEOPLAYER_H
#define MYVIDEOPLAYER_H

#include <QWidget>
#include <QPushButton>
#include <Phonon/VideoPlayer>
#include <QVBoxLayout>

class MyVideoPlayer : public QWidget
{
     Q_OBJECT
public:
      explicit MyVideoPlayer(QWidget *parent = 0);
private:
      Phonon::VideoPlayer *videoPlayer;
      QPushButton *btnButton;
      QVBoxLayout layout;

private slots:
      void onPlay();
};
#endif // MYVIDEOPLAYER_H

#include "myvideoplayer.h"

MyVideoPlayer::MyVideoPlayer(QWidget *parent) :
    QWidget(parent)
{
    videoPlayer=new Phonon::VideoPlayer(Phonon::VideoCategory,this);
    btnButton=new QPushButton("Play",this);

    layout.addWidget(btnButton);
    layout.addWidget(videoPlayer);

    setLayout(&layout);

    connect(btnButton,SIGNAL(clicked()),this,SLOT(onPlay()));
}

void MyVideoPlayer::onPlay()
{
    videoPlayer->load(Phonon::MediaSource("movie.mp4"));
    videoPlayer->play();
}
1 голос
/ 25 февраля 2011

Как прокомментировал templatetypedef, это похоже на ошибку компоновщика. Убедитесь, что вы добавили все необходимые библиотеки в файл .pro. Например, вам нужно создать ссылку на Phonon, поэтому ваш .pro-файл должен содержать

QT += phonon
...