我是Qt的新手。我的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");
它会工作。
您能帮助解决这个问题吗?也许我必须使用插槽和信号?
最佳答案
这是行不通的,因为您已声明pl
变量为要保存在堆栈中的局部变量。堆栈变量将在opon销毁后完成该功能。
因此,您应该使用pl
关键字声明和定义new
。
QMediaPlayer* pl = new QMediaPlayer;
pl->setMedia(QUrl::fromLocalFile("/home/jack/01.mp3"));
pl->setVolume(100);
pl->play();
关于c++ - 以第二种形式使用QMediaPlayer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39266244/