C++ setChecked()在类中不工作
我在Qt5中编写了一个小测试程序,并尝试实现一个复选框类,默认值为复选框。但是,每当我运行程序时,似乎没有选中复选框。以下是代码: 复选框h:C++ setChecked()在类中不工作,c++,qt,C++,Qt,我在Qt5中编写了一个小测试程序,并尝试实现一个复选框类,默认值为复选框。但是,每当我运行程序时,似乎没有选中复选框。以下是代码: 复选框h: #ifndef CHECKBOX #define CHECKBOX #include <QCheckBox> #include <QWidget> class checkbox : public QCheckBox { public: checkbox(Q
#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:不客气,不必道歉,每个人都必须从某个地方开始。对你来说可能更容易