Как получить в Qt C++ данные о состоянии элементов из другого окна

Подскажите, как получить в Qt C++ данные о состоянии элементов из другого окна. У меня есть два окна: mainwindow и smartsettings. При открытии окна smartsettings мне нужно получить в нем текущее значение из comboBox_23 окна mainwindow. Вот часть кода:

smartsettings.cpp

#include "mainwindow.h"
#include "smartsettings.h"
#include "ui_smartsettings.h"

SmartSettings::SmartSettings(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SmartSettings)
{
    ui->setupUi(this);

    if (MainWindow::ui->comboBox_23->currentText() == "FLAC") // *Здесь мне и нужно получить значение comboBox_23 (находится в окне mainwindow)*
    {
        ui->label_credits_16->show();
        ui->comboBox_26->show();
    } else {
        ui->label_credits_16->hide();
        ui->comboBox_26->hide();
    };    

}

SmartSettings::~SmartSettings()
{
    delete ui;
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "smartsettings.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_3_clicked()
{
   SmartSettings smartsettings;
   smartsettings.setModal(true);
   smartsettings.exec();

}

Ответы (1 шт):

Автор решения: Alexander Chernin

В зависимости от отношений друг к другу объектов этих окон и как один из вариантов вот так:

class SystemSettings : public QDialog {
public slots:
    void setComboBoxValue(const QString& value) {
        if (value == "FLAC")
        {
            ui->label_credits_16->show();
            ui->comboBox_26->show();
        } else {
            ui->label_credits_16->hide();
            ui->comboBox_26->hide();
        };
    }
}

class MainWindow : public QMainWindow {
public slots:
    void openSystemSettings() {
        SystemSettings window;
        window.setComboBoxValue(this->ui->comboBox_23->currentText());
        window.exec();
    }
}

А если окна открыты, то через сигналы/слоты:


class MainWindow: public QMainWindow
{
public slots:
    void openSystemSettings() {
        SystemSettings settingsDlg;
        // подписать на изменения
        connect(this->ui->comboBox_23, &QComboBox::currentTextChanged,
            &settingsDlg, &SystemSettings::setComboBoxValue);
        //  начальное значение
        settingsDlg.setComboBoxValue(this->ui->comboBox_23->currentText());
        // показать окно
        settingsDlg.exec();
    }
}
→ Ссылка