取消选中/检查QCheckBox后使QLabel不可见/可见 我将从描述我的C++ GUI应用程序开始。

取消选中/检查QCheckBox后使QLabel不可见/可见 我将从描述我的C++ GUI应用程序开始。,c++,qt,qt4,qcheckbox,C++,Qt,Qt4,Qcheckbox,我有一个主屏幕(主窗口),其中有许多显示各种数据的标签(kpi)。主屏幕上有一个设置按钮,按下该按钮将打开一个设置对话框(consettingsdialog),其中包含主窗口标签和应用程序本身的各种参数设置。按下CONSETTINGS对话框中的保存按钮后,将保存设置参数 我的目标是,如果在consettingsdialog中选中或取消选中相应的复选框,则使主窗口中的某些标签可见/不可见 这是我到目前为止所做的详细工作 在我的ConsettingDialog.cpp中 ConSettingsDia

我有一个主屏幕(主窗口),其中有许多显示各种数据的标签(kpi)。主屏幕上有一个设置按钮,按下该按钮将打开一个设置对话框(consettingsdialog),其中包含主窗口标签和应用程序本身的各种参数设置。按下CONSETTINGS对话框中的保存按钮后,将保存设置参数

我的目标是,如果在consettingsdialog中选中或取消选中相应的复选框,则使主窗口中的某些标签可见/不可见

这是我到目前为止所做的详细工作

在我的ConsettingDialog.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();     
    }
}
在my Main Window.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);

}
#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);
}
代码构建得非常完美,没有任何错误,但是当我运行它时,无论我取消选中复选框多少次,标签都保持可见。当我打开consettings时,我看到复选框被选中

我通过更改
kpi1CheckBox->setChecked(true)进行了尝试
kpi1CheckBox->setChecked(false)但主屏幕中的标签也保持可见(根本不可见)。尽管在这种情况下,“设置”对话框中的复选框设置为永久禁用


现在感觉完全卡住了,我做错了什么?

当您调用
onSaveButton()
?时,我尝试读取您的代码,它没有错,但当您选中时,我认为您必须调用
onSaveButton()
方法。您可以使用:

connect(kpi1CheckBox,SIGNAL(toggled(bool)),this,SLOT(onSaveButton(bool)));
请确保已连接所有复选框

添加示例: 对话.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

在setHomeScreenKpiVisibility和setHomeScreenKpiInvisibility方法上,为什么要创建一个新对话框?。你不是应该为m_ConSettingsDialog本身设置标签可见性吗?你实际上什么时候在ConSettingsDialog中调用onSaveButton方法?你可以尝试在onSaveButton方法中放置一个断点,并检查它是否被调用?是的。。它被称为好的。。因为点击savebutton后,页面中的其他设置参数都在工作……您发布的代码对我有效。我在尝试时犯的一个错误是,我忘记将setHomeScreenKpiVisibility&setHomeScreenKpiInvisibility声明为插槽。我当时面临的问题与你当时面临的问题类似。但是在解决了这个问题之后,代码工作得很好。还有一件事,就是需要在MainWindow::OnSaveButton中调用setChecked。当你点击它的时候,你已经设置好了,对吗?嗯,我试过了,但是仍然没有发生任何事情。和以前一样。我还有一个疑问,当我将信号连接到插槽时,这属于主窗口类,对吗???在我的主窗口中没有保存按钮。如果我理解错误,请纠正我。不,“这”是“ConSettingsDialog”,当您检查“kpi1CheckBox”时,将调用插槽“onSaveButton”,它将检查“kpi1CheckBox”状态,并向主窗口发出信号。你明白吗?嗯。。好的,但它在功能上仍然不起作用。。还有什么见解吗?请参阅我在帖子中添加的示例。
#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
#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);
}