我有一个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定义的connect语句:
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,从而设置音量。但是我收到第二个connect语句的错误,主要是说它不能转换所有参数类型。我如何解决这些连接语句的工作或有更好的方法呢?
根据您的代码,第二个窗口中的此连接QObject::connect(music_slider, SIGNAL(valueChanged(int)), this, SLOT(VolumeChange(int)));
无效,因为它没有名为SLOT
的VolumeChange
。实际上,它是SIGNAL
。但是,它有一个名为SLOT
的changeVolume
,我认为您的意思是。