Qt5.QMediaPlayer bufferStatusChanged(int)信号不工作
Qt5. The signal of QMediaPlayer bufferStatusChanged(int) not works
我的环境是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();
}
根据文档:
当播放器对象正在缓冲时;此属性保存已填充的临时缓冲区的百分比。缓冲区将需要达到100%填充后才能恢复播放,此时MediaStatus将为BufferedMedia.
在加载媒体之后,您正在进行连接,因此可能缓冲区已经处于QMediaPlayer::BufferedMedia
状态,因此信号不会发出。您可以通过在连接前打印媒体状态来检查:
qDebug() << player->mediaStatus();
相关文章:
- C++ 信号和插槽不工作:插槽不响应事件
- QObjects 被移动到 QThreads 后信号不再工作
- QSerialPort readyRead() 信号无法正常工作
- boost信号和插槽在不同的线程中不工作(使用boost::asio::io_service)
- Qt5 多线程:信号仅单向工作
- 将信号从工作线程类连接到控制器类 - QThreads
- 这个餐饮哲学家问题(dpp)的解决方案是如何工作的?互斥体和信号量
- 如何向其他节点发出信号,表明主节点没有更多工作可用
- 将工作线程信号与主窗口插槽 (Qt5) 连接时出错
- 为什么我的工作人员线程未收到此信号
- 默认情况下,从工作线程发出Qt::信号会使主线程上的UI更新?
- 信号处理程序和图书馆工作人员线程
- Qt:信号插槽不工作
- 如果堆分配的对象被销毁并且指针被重新分配,Qt的信号和插槽系统会工作吗?
- 发出信号无法正常工作
- 如何将信号连接到boost :: asio :: io_service在其他线程上发布工作时
- qt qudpsocket:readyread()信号和相应的插槽无法正常工作
- 互斥信号量是如何工作的
- pthread_cond_wait/信号和互斥锁无法按预期工作
- Qt信号槽不工作