繁体   English   中英

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

[英]Using QSlider in window to change background volume

我有一个 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 ,我认为您的意思是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM