Создание QLabel невидимым / видимым после снятия / проверки QCheckBox

Я начну с описания моего приложения C ++ GUI.

У меня есть домашний экран (главное окно), который имеет несколько меток (kpi), которые показывают различные данные. На начальном экране есть кнопка настроек, при нажатии которой открывается диалоговое окно настроек (consettingsdialog), в котором есть различные настройки параметров для меток главного окна и самого приложения. Параметры настроек сохраняются после нажатия кнопки сохранения в диалоге настроек.

Моя цель — сделать определенные метки в главном окне видимыми / невидимыми, если соответствующие флажки отмечены или не отмечены в диалоге настроек.

Это детали того, что я сделал до сих пор;

в моем consettingsdialog.cpp

ConSettingsDialog::ConSettingsDialog(QWidget *parent)
: QDialog(parent)
{
setupUi(this);
kpi1CheckBox->setChecked(true);
}

void ConSettingsDialog :: onSaveButton()
{
if(kpi1CheckBox->isChecked()==true)
{
kpi1CheckBox->setChecked(true);
emit setHomeScreenKpiVisibility();
}
else
{
kpi1CheckBox->setChecked(false);
emit setHomeScreenKpiInvisibility();
}
}

в моем mainwindow.cpp

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

connect(m_ConSettingsDialog,SIGNAL(setHomeScreenKpiVisibility()),this,SLOT(setHomeScreenKpiVisibility()));
connect(m_ConSettingsDialog,SIGNAL(setHomeScreenKpiInvisibility()),this,SLOT(setHomeScreenKpiInvisibility()));
}

void MainWindow::setHomeScreenKpiVisibility()
{

ui->mylabel->setVisible(true);
}
void MainWindow::setHomeScreenKpiInvisibility()
{

ui->mylabel->setVisible(false);

}

Код создается без каких-либо ошибок, но когда я запускаю его, независимо от того, сколько раз я снимал флажок, метка остается видимой. И когда я открываю настройки, я вижу флажок установлен.

Я попробовал поменяв kpi1CheckBox->setChecked(true); в consettingsdialog.cpp для kpi1CheckBox->setChecked(false); но тогда и метка на домашнем экране остается видимой (вообще невидимой). Хотя в этом случае флажок в диалоге настроек постоянно отключен.

Чувствую себя полностью застрявшим сейчас, что я делаю не так?

2

Решение

Когда ты звонишь onSaveButton() Я пытаюсь прочитать ваш код, это не так, но когда вы проверили, я думаю, что вы должны позвонить onSaveButton() метод. Вы можете использовать:

connect(kpi1CheckBox,SIGNAL(toggled(bool)),this,SLOT(onSaveButton(bool)));

Пожалуйста, убедитесь, что вы подключены для всех флажок.

Добавить пример:
dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
Q_OBJECT

public:
explicit Dialog(QWidget *parent = 0);
~Dialog();

private:
Ui::Dialog *ui;

private slots:
void onsave(bool checked);
signals:
void setHomeScreenKpiVisibility();
void setHomeScreenKpiInvisibility();
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
connect(ui->checkBox,SIGNAL(toggled(bool)),this,SLOT(onsave(bool)));
}

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

void Dialog::onsave(bool checked)
{
if(ui->checkBox->isChecked()==true)
{
ui->checkBox->setChecked(true);
emit setHomeScreenKpiVisibility();
}
else
{
ui->checkBox->setChecked(false);
emit setHomeScreenKpiInvisibility();
}
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
private slots:
void show1();
void enable1();
void disable1();
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"#include "dialog.h"Dialog *dialog;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
dialog = new Dialog(this);
connect(ui->pushButton,SIGNAL(clicked()),dialog,SLOT(show()));
connect(dialog,SIGNAL(setHomeScreenKpiVisibility()),this,SLOT(enable1()));
connect(dialog,SIGNAL(setHomeScreenKpiInvisibility()),this,SLOT(disable1()));
}

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

void MainWindow::show1()
{
dialog->exec ();
}

void MainWindow::enable1()
{
ui->label->setEnabled (true);
}

void MainWindow::disable1()
{
ui->label->setEnabled (false);
}
1

Другие решения


По вопросам рекламы [email protected]