Я пытаюсь сделать слайдер громкости, который изменяет громкость плеера в QT, но я не могу заставить его работать.
Это изображение моего музыкального плеера. В настоящее время, когда я перемещаю ползунок громкости во время воспроизведения музыки, громкость не изменяется / обновляется до значения ползунка.
Это фрагменты кода, который я использую для тома:
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
неправильно, потому что нет volumeChanged(int)
сигнал в QSlider
и должно быть некоторое уведомление о сбое соединения от 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, но это многословно. Поэтому я спросил вас, почему бы просто не подключить А к С.
Что касается вашей последней модификации:
connect(volumeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(volumeChanged(int))); // Does nothing
connect(volumeSlider, SIGNAL(valueChanged(int)), player, SLOT(setVolume(int)));
Это похоже на соединение А с В и соединение А с С, но работает только соединение А с С (упомянуто выше). Первое соединение не требуется (так как B является SIGNAL
)
Я тупой, это было так же просто, как изменить:
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»