如何在Qt中创建工作音量滑块?

时间:2015-05-07 01:38:52

标签: c++ qt media-player

我试图制作一个音量滑块来改变QT中播放器的音量,但我无法让它发挥作用。

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

enter image description here

这些是我用于volumelider的代码的snipets:

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);
}

2 个答案:

答案 0 :(得分:2)

呃......我的意思是一行

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

是错误的,因为volumeChanged(int)中没有QSlider信号,并且在编译代码时显示有关Qt Creator连接失败的通知(显示在Qt Creator的控制台中)。 / p>

我猜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

答案 1 :(得分:0)

我很笨,就像改变一样简单:

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

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

谢谢Tay2510: “为什么不将valueChanged(int)连接到setVolume(int)? - Tay2510”