c++ - 如何在 Qt 中制作工作音量 slider ?

标签 c++ qt media-player

我正在尝试制作一个音量 slider 来改变 QT 中播放器的音量,但我无法让它工作。

这是我的音乐播放器的图片。目前,当我在播放音乐时滑动音量 slider 时,音量不会更改/更新为 slider 的值。

enter image description here

这些是我用于 volumeslider 的代码片段:

volumeSlider = new QSlider(Qt::Horizontal, this);
volumeSlider->setRange(0, 100);
volumeSlider->setFixedWidth(100);
volumeSlider->setValue(100);
player = new QMediaPlayer;

..

connect(volumeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(volumeChanged(int)));
connect(volumeSlider, SIGNAL(volumeChanged(int)), player, SLOT(setVolume(int)));

..

    int MainWindow::volume() const
{
    return volumeSlider->value();
}


void MainWindow::setVolume(int volume)
{
    player->setVolume(volume);
}

最佳答案

呃...我是说只有一行

connect(volumeSlider, SIGNAL(valueChanged(int)),player, SLOT(setVolume(int)));

这就是让它工作所需的一切。


您的原始代码:

connect(volumeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(volumeChanged(int)));
connect(volumeSlider, SIGNAL(volumeChanged(int)), player, SLOT(setVolume(int)));  
      //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Error here

是错误的,因为 QSlider 中没有 volumeChanged(int) 信号,并且在您编译代码时应该有一些关于 Qt Creator 连接失败的通知(如图所示)在 Qt Creator 的控制台中)。

我猜 volumeChanged(int) 是在主小部件中定义的自定义信号,如果将原始代码更改为

connect(volumeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(volumeChanged(int)));
connect(this, SIGNAL(volumeChanged(int)), player, SLOT(setVolume(int)));
     // ^^^^

它应该可以工作,因为您将 A 连接到 B,然后将 B 连接到 C,但它很冗长。因此我问你为什么不直接将 A 连接到 C。

至于你最后的修改:

connect(volumeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(volumeChanged(int))); // Does nothing
connect(volumeSlider, SIGNAL(valueChanged(int)), player, SLOT(setVolume(int)));

这就像将 A 连接到 B,并将 A 连接到 C,但只有 A 到 C 的连接有效(如上所述)。第一个连接不是必需的(因为 B 是一个 SIGNAL)

关于c++ - 如何在 Qt 中制作工作音量 slider ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090488/

相关文章:

c++ - C++中0到1之间的Box muller随机数

Ovi 商店上有 C++/Qt 应用程序吗?

c# - ExpressionMediaPlayer 播放 .mpeg

android - 使用onClick播放两个声音

android - 流式传输到 Android MediaPlayer

成对的 C++ vector

C++ 11/14/17 支持 "auto new"

c++ - 通过引用传入优先队列

c++ - TreeView 中的分层数据和 TreeView 更新技术

c++ - cmake、conan 和 qt hello world 项目构建错误