Qt5. Сигнал QMediaPlayer bufferStatusChanged (int) не работает

Моя среда Qt5 32bit Windows 7 64bit MSVC 2010 32bit

Мой код простой музыкальный проигрыватель

это основной код

slider = new QSlider(Qt::Horizontal);
slider->setRange(0, 100);
player->setMedia(QUrl::fromLocalFile("D://test.mp3"));
player->setVolume(50);
...
connect(player, SIGNAL(bufferStatusChanged(int)), slider, SLOT(setValue(int)));

Когда я запускаю этот проигрыватель, он может воспроизводить музыку, но ценность slider никогда не менялся

тогда я добавляю это:

connect(player, SIGNAL(bufferStatusChanged(int)), slider, SLOT(helloWorld(int)));
...
void player::helloWorld(int)
{
qDebug() << "hello, world";
}

Я запустил его снова и нашел строку hello, world никогда не печататься.

ничего не напечатано.

Почему ценность slider не измениться?

————————-полный код —————————

#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{

mainWidget = new QWidget();
HLayout = new QHBoxLayout();
VLayout = new QVBoxLayout();

playButton = new QPushButton("Okay");
exitButton = new QPushButton("Exit");
slider = new QSlider(Qt::Horizontal);
player = new QMediaPlayer();

connect(playButton, SIGNAL(toggled(bool)), this, SLOT(playOrPause(bool)));
connect(player, SIGNAL(bufferStatusChanged(int)), slider, SLOT(setValue(int)));
connect(player, SIGNAL(bufferStatusChanged(int)), this, SLOT(test(int)));
player->setMedia(QUrl::fromLocalFile("D://test.mp3"));
player->play();
player->setVolume(50);
slider->setRange(0, 100);//UI
exitButton->setAutoDefault(true);
playButton->setAutoDefault(true);
playButton->setCheckable(true);

HLayout->addStretch();
HLayout->addWidget(playButton);
HLayout->addWidget(exitButton);

VLayout->addWidget(slider);
VLayout->addStretch();
VLayout->addLayout(HLayout);

mainWidget->setLayout(VLayout);

setCentralWidget(mainWidget);
setWindowIcon(QIcon(":/icons/icon.png"));
setWindowTitle("YUCOAT");

//connect(playButton, SIGNAL(toggled(bool)), this, SLOT(playOrPause(bool)));
//connect(player, SIGNAL(bufferStatusChanged(int)), slider, SLOT(setValue(int)));

}

MainWindow::~MainWindow()
{

}

void MainWindow::playOrPause(bool s)
{
if (s)
player->play();
else
player->pause();

}

void MainWindow::test(int s)
{
qDebug() << "hello, world!";
qDebug() << s;
qDebug() << player->mediaStatus();
}

1

Решение

Согласно документация :

Когда объект игрока буферизуется; это свойство содержит
процент заполнения временного буфера. Буфер будет
необходимо возобновить воспроизведение на 100%, чтобы возобновить воспроизведение, после чего
MediaStatus будет BufferedMedia.

Вы делаете соединение после загрузка носителя, поэтому, вероятно, буфер уже находится в QMediaPlayer::BufferedMedia состояние, чтобы сигнал не испускался. Вы можете проверить это, распечатав статус СМИ до подключения:

qDebug() << player->mediaStatus();
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]