我在Qt 5中编写了一个小型测试程序,并尝试实现一个复选框类,默认情况下选中了该复选框。但是,每当我运行该程序时,似乎都未选中该复选框。这是下面的代码:

checkbox.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


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();
    }


不过有趣的是,如果我在main中调用setChecked with box,则会输出一个复选框。

任何帮助是极大的赞赏

最佳答案

你在做这个...

QCheckBox *cBox = new QCheckBox;
cBox->setChecked(true);


...这将创建第二个动态分配的QCheckBox-与嵌入在checkbox中的基础对象不同-然后泄漏该对象/内存。您应该通过调用继承的成员函数来简单地检查嵌入式基类QCheckBox

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

关于c++ - setChecked()在类里面不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31954510/

10-11 17:46