2016-09-01 1 views
1

Je suis débutant à Qt. J'ai un problème avec QMediaPlayer: mon programme a 2 formulaires (formulaire principal et pour avis). Donc, il a une condition et si c'est vrai, le programme doit montrer la deuxième forme et jouer de la musique sur le formulaire de charge.Utilisation de QMediaPlayer en deuxième forme

main.cpp

#include "mainwindow.h" 
#include <QApplication> 
#include "dialog.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    Dialog d; 
    d.musicPlay(); 
    d.show(); 


    return a.exec(); 
} 

dialog.cpp

#include "dialog.h" 
#include "ui_dialog.h" 
#include <QMediaPlayer> 
#include <QUrl> 
#include <QDebug> 

Dialog::Dialog(QWidget *parent) : 
    QDialog(parent), 
    uix(new Ui::Dialog) 
{ 
    uix->setupUi(this); 
} 

void Dialog::musicPlay() const 
{ 
    QMediaPlayer pl; 
    pl.setMedia(QUrl::fromLocalFile("/home/jack/01.mp3")); 
    pl.setVolume(100); 
    pl.play(); 
    qDebug()<<pl.errorString(); 
} 

Dialog::~Dialog() 
{ 
    delete uix; 
} 

Il ne fonctionne pas, mais si Musicplay() serait comme:

uix->label->setText("qwerty"); 

il travaillerait. Pouvez-vous aider à résoudre ce problème? Peut-être que je dois utiliser des fentes et des signaux?

Répondre

0

Cela ne fonctionne pas car vous avez déclaré la variable pl en tant que variable locale en cours d'enregistrement dans la pile. Les variables de pile seront détruites en finissant la fonction. Par conséquent, vous devez déclarer et définir le pl en utilisant le mot-clé new.

QMediaPlayer* pl = new QMediaPlayer; 
pl->setMedia(QUrl::fromLocalFile("/home/jack/01.mp3")); 
pl->setVolume(100); 
pl->play(); 
+0

Merci! Je déclare pointer pl à dialog.h et ça marche) –