Vamsi Krishna B
Vamsi Krishna B

Reputation: 11500

Qt phonon media object error

#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();

   }

This code won't play the file, and I'm getting this error:

:: error: collect2: ld returned 1 exit status

Can anyone help me get the file to play when I click the button?

Thanks.

Upvotes: 0

Views: 1520

Answers (2)

Lwin Htoo Ko
Lwin Htoo Ko

Reputation: 2406

I guess that there are one or more functions declared in the header file but their bodies haven't been built yet.

for example:

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

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

So, please check that all the functions in the whole project have their bodies.

For a basic phonon media player,

#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();
}

Upvotes: 2

Gareth Stockwell
Gareth Stockwell

Reputation: 3122

As templatetypedef commented, it sounds like a linker error. Ensure that you have added all of the necessary libraries to the .pro file. For example, you need to link against Phonon, so your .pro file must contain

QT += phonon

Upvotes: 1

Related Questions