以第二种形式使用QMediaPlayer

Using QMediaPlayer in second form

本文关键字:QMediaPlayer 二种      更新时间:2023-10-16

我是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变量声明为保存在堆栈中的局部变量。函数结束后,堆栈变量将被销毁。

因此,您应该使用new关键字来声明和定义pl

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