使用窗口中的QSlider更改背景音量

Using QSlider in window to change background volume

本文关键字:背景 QSlider 窗口      更新时间:2023-10-16

我有一个MainWindow,然后有一个SecondWindow类,当在MainWindow中单击按钮时会打开。这个SecondWindow类中有一个滑块,我想控制MainWindow和SecondWindow类的音乐。

我的主要功能:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
SecondWindow s;
//this connects MainWindow to SecondWindow to open
QObject::connect(...);
//plays background music
Music m;
QObject::connect(&s, SIGNAL(Volume(int)), &m, SLOT(setVol(int)));

return a.exec();
}

我有一个音乐对象,它可以播放这样定义的功能:

class Music
{
public:
Music();
public slots:
void setVol(int value);
private:
QMediaPlayer* music;
};

我的SecondWindow定义如下:

class SecondWindow: public QMainWindow
{
Q_OBJECT
public:
explicit SecondWindo(QWidget *parent = nullptr);
~SecondWindow();
signals:
void VolumeChange(int value);
void Volume(int value);
public slots:
void ShowSettingsWindow();
void changeVolume(int value);
private:
void Connections();
int volume; //holds the volume value based on the music_slider
QSlider* music_slider;

};

在我的SecondWindow默认构造函数的底部,我有以下连接语句,带有SLOT定义:

QObject::connect(music_slider, SIGNAL(valueChanged(int)), this, SLOT(VolumeChange(int)));
void SecondWindow::VolumeChange(int value){
emit Volume(value);
}

那么音乐的SLOT定义如下:

void Music::setVol(int value){
music->setVolume(value);
}

我目前正在尝试使其在每次滑块更改值时,都会为滑块当前的值调用VolumeChange。然后,调用信号Volume,使音乐调用函数setVol,从而设置音量。但我在main中的第二个connect语句中收到一个错误,说它无法转换所有参数类型。我如何修复这些连接语句,或者有更好的方法吗?

根据您的代码,第二个窗口中的连接QObject::connect(music_slider, SIGNAL(valueChanged(int)), this, SLOT(VolumeChange(int)));无效,因为它没有名为VolumeChangeSLOT。事实上,它是一个SIGNAL。然而,它有一个叫changeVolumeSLOT,我想你的意思是。