Как получить в 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();
}
}