我开始使用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
环境:
Fedora 29
Qt 5.11.3-1
我试图在Qt创建者和终端上运行此程序。
答案 0 :(得分:2)
您的应用程序缺少
QCoreApplication
(如果应该没有头的话)QGuiApplication
用于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();
}