在 unchecking/checking QCheckBox 之后制作 QLabel invisible/visible
Making a QLabel invisible/visible after unchecking/checking 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);
}
代码构建完美,没有任何错误,但是当我 运行 无论取消选中复选框多少次,标签都保持可见。当我打开配置时,我看到复选框已被选中。
我尝试将 consettingsdialog.cpp 中的 kpi1CheckBox->setChecked(true);
更改为 kpi1CheckBox->setChecked(false);
,但主屏幕中的标签仍然可见(根本不可见)。虽然在这种情况下,设置对话框中的复选框被设置为永久禁用。
现在感觉完全卡住了,我做错了什么?
当你调用 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);
}
我将从描述我的 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);
}
代码构建完美,没有任何错误,但是当我 运行 无论取消选中复选框多少次,标签都保持可见。当我打开配置时,我看到复选框已被选中。
我尝试将 consettingsdialog.cpp 中的 kpi1CheckBox->setChecked(true);
更改为 kpi1CheckBox->setChecked(false);
,但主屏幕中的标签仍然可见(根本不可见)。虽然在这种情况下,设置对话框中的复选框被设置为永久禁用。
现在感觉完全卡住了,我做错了什么?
当你调用 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);
}