我是从C++开始的,我正在尝试使用Qt播放一个mp3文件。我编写了这段代码,但由于某种原因,它不起作用。我在网上搜索过,但找不到有用的东西。
这是我的密码:
#include <iostream>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QFileInfo>
#include <QUrl>
int main()
{
QMediaPlaylist *list = new QMediaPlaylist;
list->addMedia(QUrl::fromLocalFile(QFileInfo("Filename.mp3").absoluteFilePath()));
QMediaPlayer *music;
music = new QMediaPlayer();
music->setPlaylist(list);
music->play();
return 0;
}没有音乐播放,这个程序的输出是:
QObject::startTimer:定时器只能用于以QThread启动的线程 QObject::startTimer:定时器只能用于以QThread启动的线程
这是我的.pro文件:
TEMPLATE = app
TARGET = MediaPlayer
QT += core multimedia
SOURCES += main.cpp环境
软呢帽29 Qt 5.11.3-1
我试着在Qt创建者和终端上运行这个程序。
发布于 2019-03-16 19:00:24
您的应用程序缺少一个
QCoreApplication如果它应该是无头的QGuiApplication for QtQuick,或QApplication (如果它具有小部件)Q*Application是大多数Qt应用程序必须的组件,因为这是处理主线程上所有事件和信号的部分。这就是为什么会出现与QTimer相关的错误,因为Qt无法预先用QThread“包装”主线程。
只需添加它,以及启动它的app.exec();,您就会没事。app.exec()将阻塞直到应用程序完成。
此外,在应用程序的整个生命周期中所需的实例通常应该在堆栈上创建,而不是堆上。
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
QMediaPlaylist list;
auto media = QUrl::fromLocalFile(QFileInfo("Filename.mp3").absoluteFilePath());
list.addMedia(media);
QMediaPlayer music;
music.setPlaylist(list);
music.play();
return app.exec();
}https://stackoverflow.com/questions/55198955
复制相似问题