2016-09-01 4 views
1

Я новичок в Qt. У меня проблема с QMediaPlayer: моя программа имеет 2 формы (основная форма и для уведомления). Таким образом, это условие, и если это правда, программа должна отображать вторую форму и воспроизводить музыку в форме загрузки.Использование QMediaPlayer во второй форме

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

Это не работает, но если musicPlay() будет, как:

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

он будет работать. Помогите решить эту проблему? Может быть, я должен использовать слоты и сигналы?

ответ

0

Это не работает, потому что вы указали переменную pl как локальную переменную, сохраненную в стеке. Переменные стека будут уничтожены, если закончить функцию.

Итак, вы должны объявить и определить pl, используя ключевое слово new.

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

Спасибо! Я объявляю указатель pl на dialog.h, и он работает) –

Смежные вопросы