如何在 Qt 中制作工作音量滑块?
How do I make a working volume slider in Qt?
我正在尝试制作一个音量滑块来改变 QT 中播放器的音量,但我无法让它工作。
这是我的音乐播放器的图片。目前,当我在播放音乐时滑动音量滑块时,音量不会 change/update 到滑块的值。
这些是我用于 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)), 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:
"Why not just connect valueChanged(int) to setVolume(int)? – Tay2510"
呃...我是说只有一行
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
)
我正在尝试制作一个音量滑块来改变 QT 中播放器的音量,但我无法让它工作。
这是我的音乐播放器的图片。目前,当我在播放音乐时滑动音量滑块时,音量不会 change/update 到滑块的值。
这些是我用于 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)), 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: "Why not just connect valueChanged(int) to setVolume(int)? – Tay2510"
呃...我是说只有一行
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
)