QMediaPlayer не производит аудио - PullRequest
0 голосов
/ 16 марта 2019

Я начинаю с C ++ и пытаюсь воспроизвести mp3-файл с помощью Qt. Я написал этот код, но по какой-то причине он не работает. Я искал в Интернете, но не смог найти то, что могло бы помочь.

Вот мой код:

#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 и на терминале.

1 Ответ

3 голосов
/ 16 марта 2019

В вашем приложении отсутствует

  • 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();
}
...