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

Posted

技术标签:

【中文标题】在窗口中使用 QSlider 更改背景音量【英文标题】:Using QSlider in window to change background volume 【发布时间】:2020-02-20 03:53:53 【问题描述】:

我有一个 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 语句中收到一个错误,说它无法转换所有参数类型。 我如何修复这些连接语句以使其正常工作或有更好的方法来做到这一点?

【问题讨论】:

在音乐标题中的 public: 之前添加 Q_OBJECT 这不起作用,我收到了同样的错误,我尝试通过编写 class Music : public QObject 从 QObject 派生它,但随后收到我的 Settings::VolumeChange(int) 已在 Settings.obj 中定义的错误 请编辑您的代码以使用新的signal/slot syntax 并逐字包含任何错误消息。 【参考方案1】:

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

【讨论】:

以上是关于在窗口中使用 QSlider 更改背景音量的主要内容,如果未能解决你的问题,请参考以下文章

Pyqtgraph ImageView 在 QSlider 值更改后未更新

QT软件开发之基础控件--2.4.9 QSlider滑块

如何在python中使用pyqt5将QSlider添加到主窗口的工具栏

iOS 9:如何在不显示系统条形音箱弹出窗口的情况下以编程方式更改音量?

如何使用样式表更改 QSlider 句柄宽度

将背景音乐音量从活动更改为服务