C++ setChecked()在类中不工作

C++ setChecked()在类中不工作,c++,qt,C++,Qt,我在Qt5中编写了一个小测试程序,并尝试实现一个复选框类,默认值为复选框。但是,每当我运行程序时,似乎没有选中复选框。以下是代码: 复选框h: #ifndef CHECKBOX #define CHECKBOX #include <QCheckBox> #include <QWidget> class checkbox : public QCheckBox { public: checkbox(Q

我在Qt5中编写了一个小测试程序,并尝试实现一个复选框类,默认值为复选框。但是,每当我运行程序时,似乎没有选中复选框。以下是代码:

复选框h:

    #ifndef CHECKBOX
    #define CHECKBOX

    #include <QCheckBox>
    #include <QWidget>



   class checkbox : public QCheckBox
   {
   public:

        checkbox(QWidget *parent = 0) : QCheckBox(parent)
        {
            QCheckBox *cBox = new QCheckBox;
           cBox->setChecked(true);
        }
    };

    #endif // CHECKBOX
#ifndef复选框
#定义复选框
#包括
#包括
类复选框:公共QCheckBox
{
公众:
复选框(QWidget*父项=0):QCheckBox(父项)
{
QCheckBox*cBox=新的QCheckBox;
cBox->setChecked(真);
}
};
#endif//复选框
main.cpp:

    #include "mainwindow.h"
    #include <QApplication>
    #include <QAction>
    #include <QtWidgets>
    #include <checkbox.h>

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget *window = new QWidget;

        window->setWindowTitle("test");
        checkbox *box = new checkbox;

        QHBoxLayout *mainLayout = new QHBoxLayout;
        mainLayout->addWidget(box);

       window->setLayout(mainLayout);
       window->show();

       return a.exec();
    }
#包括“mainwindow.h”
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QWidget*窗口=新的QWidget;
窗口->设置窗口标题(“测试”);
复选框*box=新复选框;
QHBoxLayout*mainLayout=新的QHBoxLayout;
mainLayout->addWidget(框);
窗口->设置布局(主布局);
窗口->显示();
返回a.exec();
}
有趣的是,若我在main中调用setChecked with box,它会输出一个复选框

非常感谢您的任何帮助

您正在这样做

QCheckBox *cBox = new QCheckBox;
cBox->setChecked(true);
…这会创建第二个动态分配的
QCheckBox
,与嵌入在
复选框中的基本对象不同,然后泄漏该对象/内存。您只需通过调用继承的成员函数来检查嵌入式基类
QCheckBox

checkbox(QWidget* parent = nullptr)
  : QCheckBox(parent)
{
    setChecked(true);
}
你这么做

QCheckBox *cBox = new QCheckBox;
cBox->setChecked(true);
…这会创建第二个动态分配的
QCheckBox
,与嵌入在
复选框中的基本对象不同,然后泄漏该对象/内存。您只需通过调用继承的成员函数来检查嵌入式基类
QCheckBox

checkbox(QWidget* parent = nullptr)
  : QCheckBox(parent)
{
    setChecked(true);
}
你这么做

QCheckBox *cBox = new QCheckBox;
cBox->setChecked(true);
…这会创建第二个动态分配的
QCheckBox
,与嵌入在
复选框中的基本对象不同,然后泄漏该对象/内存。您只需通过调用继承的成员函数来检查嵌入式基类
QCheckBox

checkbox(QWidget* parent = nullptr)
  : QCheckBox(parent)
{
    setChecked(true);
}
你这么做

QCheckBox *cBox = new QCheckBox;
cBox->setChecked(true);
…这会创建第二个动态分配的
QCheckBox
,与嵌入在
复选框中的基本对象不同,然后泄漏该对象/内存。您只需通过调用继承的成员函数来检查嵌入式基类
QCheckBox

checkbox(QWidget* parent = nullptr)
  : QCheckBox(parent)
{
    setChecked(true);
}

但是如果cbox是checkbox的子项,那么当其父项被销毁时,它不应该被销毁吗?明白了,忘了->只是创建了一个副本,谢谢!“子”不是C++中使用的术语。有两件事与您的想法类似-如果
cBox
checkbox
的成员变量,那么它的任何析构函数都将运行,然后当
checkbox
的析构函数运行时,内存将被释放。但是原始指针没有有意义的析构函数-它不会
删除指向
QCheckBox
的对象,因此仍然存在泄漏。人们使用智能指针来自动清理:
std::unique\u ptr cBox。类似地,当函数或
/
if
/
/
for
等时,会清除一些“自动”变量。创建这些变量的范围退出。好的,我明白了。谢谢你为我澄清了这个问题,也为这个初学者的问题感到抱歉。@Manny:不客气,不必道歉,每个人都必须从某个地方开始。不过,你可以用一本好书来轻松地阅读(在某处某处有一个C++推荐阅读列表,但我没有链接,也没有我自己的推荐给初学者)。干杯。但如果cbox是checkbox的子项,那么当其父项被销毁时,它不应该被销毁吗?明白了,忘了->只是创建了一个副本,谢谢!“子”不是C++中使用的术语。有两件事与您的想法类似-如果
cBox
checkbox
的成员变量,那么它的任何析构函数都将运行,然后当
checkbox
的析构函数运行时,内存将被释放。但是原始指针没有有意义的析构函数-它不会
删除指向
QCheckBox
的对象,因此仍然存在泄漏。人们使用智能指针来自动清理:
std::unique\u ptr cBox。类似地,当函数或
/
if
/
/
for
等时,会清除一些“自动”变量。创建这些变量的范围退出。好的,我明白了。谢谢你为我澄清了这个问题,也为这个初学者的问题感到抱歉。@Manny:不客气,不必道歉,每个人都必须从某个地方开始。不过,你可以用一本好书来轻松地阅读(在某处某处有一个C++推荐阅读列表,但我没有链接,也没有我自己的推荐给初学者)。干杯。但如果cbox是checkbox的子项,那么当其父项被销毁时,它不应该被销毁吗?明白了,忘了->只是创建了一个副本,谢谢!“子”不是C++中使用的术语。有两件事与您的想法类似-如果
cBox
checkbox
的成员变量,那么它的任何析构函数都将运行,然后当
checkbox
的析构函数运行时,内存将被释放。但是原始指针没有有意义的析构函数-它不会
删除指向
QCheckBox
的对象,因此仍然存在泄漏。人们使用智能指针来自动清理:
std::unique\u ptr cBox。类似地,当函数或
/
if
/
/
for
等时,会清除一些“自动”变量。创建这些变量的范围退出。好的,我明白了。谢谢你为我澄清了这个问题,也为这个初学者的问题感到抱歉。@Manny:不客气,不必道歉,每个人都必须从某个地方开始。对你来说可能更容易