Как сделать слайдер рабочего объема в Qt?

Я пытаюсь сделать слайдер громкости, который изменяет громкость плеера в 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);
}

0

Решение

Эх … я имею ввиду только одну строчку

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)

2

Другие решения

Я тупой, это было так же просто, как изменить:

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»

0

По вопросам рекламы [email protected]