Использование QSlider в окне для изменения громкости фона - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть MainWindow, а затем класс SecondWindow, который открывается при нажатии кнопки в MainWindow. В этом классе SecondWider есть ползунок, который я хочу управлять музыкой c в классах 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();
}

У меня музыка c объект, который воспроизводит функцию, определенную так:

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 по умолчанию у меня есть следующий оператор connect: с определением SLOT:

QObject::connect(music_slider, SIGNAL(valueChanged(int)), this, SLOT(VolumeChange(int)));

void SecondWindow::VolumeChange(int value){
    emit Volume(value);
}

, затем musi c определил слот следующим образом:

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

В настоящее время я пытаюсь сделать так, чтобы каждый раз, когда ползунок изменял значение, VolumeChange вызывается для значения, которое в данный момент имеет ползунок. Затем вызывается сигнал Volume, в результате чего musi c вызывает функцию setVol и устанавливает громкость. Но я получаю сообщение об ошибке во втором операторе подключения в основном, говоря, что он не может преобразовать все типы аргументов. Как я могу исправить эти операторы подключения для работы или есть лучший способ сделать это?

1 Ответ

0 голосов
/ 20 февраля 2020

Согласно вашему коду, это соединение QObject::connect(music_slider, SIGNAL(valueChanged(int)), this, SLOT(VolumeChange(int))); во втором окне недопустимо, поскольку оно не имеет SLOT с именем VolumeChange. На самом деле это SIGNAL. Тем не менее, у него есть SLOT под названием changeVolume, что, я думаю, вы действительно имеете в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...