我的环境为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();
}
答案 0 :(得分:1)
当玩家对象缓冲时;这家酒店拥有 填充的临时缓冲区的百分比。缓冲区会 需要达到100%填充才能恢复播放,此时 MediaStatus将是BufferedMedia。
您在加载媒体后进行连接,因此缓冲区可能已处于QMediaPlayer::BufferedMedia
状态,因此信号不会被激活。您可以通过在连接前打印media status来检查它:
qDebug() << player->mediaStatus();