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

问题描述 投票:0回答:1

我有一个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语句的错误,主要是说它不能转换所有参数类型。我如何解决这些连接语句的工作或有更好的方法呢?

c++ qt qt5
1个回答
0
投票

根据您的代码,第二个窗口中的此连接QObject::connect(music_slider, SIGNAL(valueChanged(int)), this, SLOT(VolumeChange(int)));无效,因为它没有名为SLOTVolumeChange。实际上,它是SIGNAL。但是,它有一个名为SLOTchangeVolume,我认为您的意思是。

© www.soinside.com 2019 - 2024. All rights reserved.