2016-09-01 2 views
1

私はQtで初心者です。 QMediaPlayerに問題があります:私のプログラムは2つの書式(メインフォームと通知)を持っています。したがって、条件があり、それが真実ならば、プログラムは第2の形式を表示し、負荷形式で音楽を再生する必要があります。QMediaPlayerを第2の形式で使用する

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

ありがとうございました!私はdialog.hでポインタplを宣言し、それは動作します) –

関連する問題