Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt UI Generator doesn't deallocate resource

this is a code generated from qt ui file , i see that the code use new keyword to allocate memory but there is not delete keyword in the class to delete allocated resource , is this mistake from qt developers or there is something else (no deallocated resource )?

/********************************************************************************
** Form generated from reading UI file 'canyyeffectcontrol.ui'
**
** Created by: Qt User Interface Compiler version 5.0.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_CANYYEFFECTCONTROL_H
#define UI_CANYYEFFECTCONTROL_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QSlider>
#include <QtWidgets/QSpinBox>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_canyyeffectcontrol
{
public:
    QGridLayout *gridLayout;
    QSlider *Threshold2Slider;
    QLabel *Threshold1Label;
    QLabel *ApertureSizeLabel;
    QLabel *Threshold2Label;
    QSpinBox *Threshold1Spin;
    QSpinBox *Threshold2Spin;
    QSpinBox *ApertureSizeSpin;
    QSlider *ApertureSizeSlider;
    QSlider *Threshold1Slider;
    QCheckBox *EL2GLabel;

    void setupUi(QWidget *canyyeffectcontrol)
    {
        if (canyyeffectcontrol->objectName().isEmpty())
            canyyeffectcontrol->setObjectName(QStringLiteral("canyyeffectcontrol"));
        canyyeffectcontrol->resize(432, 210);
        canyyeffectcontrol->setMinimumSize(QSize(153, 119));
        canyyeffectcontrol->setMaximumSize(QSize(432, 210));
        gridLayout = new QGridLayout(canyyeffectcontrol);
        gridLayout->setObjectName(QStringLiteral("gridLayout"));
        Threshold2Slider = new QSlider(canyyeffectcontrol);
        Threshold2Slider->setObjectName(QStringLiteral("Threshold2Slider"));
        Threshold2Slider->setOrientation(Qt::Horizontal);

        gridLayout->addWidget(Threshold2Slider, 4, 1, 1, 2);

        Threshold1Label = new QLabel(canyyeffectcontrol);
        Threshold1Label->setObjectName(QStringLiteral("Threshold1Label"));

        gridLayout->addWidget(Threshold1Label, 2, 0, 1, 1);

        ApertureSizeLabel = new QLabel(canyyeffectcontrol);
        ApertureSizeLabel->setObjectName(QStringLiteral("ApertureSizeLabel"));

        gridLayout->addWidget(ApertureSizeLabel, 5, 0, 1, 1);

        Threshold2Label = new QLabel(canyyeffectcontrol);
        Threshold2Label->setObjectName(QStringLiteral("Threshold2Label"));

        gridLayout->addWidget(Threshold2Label, 4, 0, 1, 1);

        Threshold1Spin = new QSpinBox(canyyeffectcontrol);
        Threshold1Spin->setObjectName(QStringLiteral("Threshold1Spin"));

        gridLayout->addWidget(Threshold1Spin, 2, 3, 1, 1);

        Threshold2Spin = new QSpinBox(canyyeffectcontrol);
        Threshold2Spin->setObjectName(QStringLiteral("Threshold2Spin"));

        gridLayout->addWidget(Threshold2Spin, 4, 3, 1, 1);

        ApertureSizeSpin = new QSpinBox(canyyeffectcontrol);
        ApertureSizeSpin->setObjectName(QStringLiteral("ApertureSizeSpin"));

        gridLayout->addWidget(ApertureSizeSpin, 5, 3, 1, 1);

        ApertureSizeSlider = new QSlider(canyyeffectcontrol);
        ApertureSizeSlider->setObjectName(QStringLiteral("ApertureSizeSlider"));
        ApertureSizeSlider->setOrientation(Qt::Horizontal);

        gridLayout->addWidget(ApertureSizeSlider, 5, 1, 1, 2);

        Threshold1Slider = new QSlider(canyyeffectcontrol);
        Threshold1Slider->setObjectName(QStringLiteral("Threshold1Slider"));
        Threshold1Slider->setOrientation(Qt::Horizontal);

        gridLayout->addWidget(Threshold1Slider, 2, 1, 1, 1);

        EL2GLabel = new QCheckBox(canyyeffectcontrol);
        EL2GLabel->setObjectName(QStringLiteral("EL2GLabel"));

        gridLayout->addWidget(EL2GLabel, 0, 0, 1, 1);


        retranslateUi(canyyeffectcontrol);

        QMetaObject::connectSlotsByName(canyyeffectcontrol);
    } // setupUi

    void retranslateUi(QWidget *canyyeffectcontrol)
    {
        canyyeffectcontrol->setWindowTitle(QApplication::translate("canyyeffectcontrol", "Canny effect control", 0));
        Threshold1Label->setText(QApplication::translate("canyyeffectcontrol", "Threshold size 1", 0));
        ApertureSizeLabel->setText(QApplication::translate("canyyeffectcontrol", "Aperture size", 0));
        Threshold2Label->setText(QApplication::translate("canyyeffectcontrol", "Threshold size 2", 0));
        EL2GLabel->setText(QApplication::translate("canyyeffectcontrol", "Enable L2G", 0));
    } // retranslateUi

};

namespace Ui {
    class canyyeffectcontrol: public Ui_canyyeffectcontrol {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_CANYYEFFECTCONTROL_H

is that mean that i should rewrite the code to release memory (unique_ptr for example) and the code should be like this

/********************************************************************************
** Form generated from reading UI file 'canyyeffectcontrol.ui'
**
** Created by: Qt User Interface Compiler version 5.0.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
** I modify the code 
********************************************************************************/

#ifndef UI_CANYYEFFECTCONTROL_H
#define UI_CANYYEFFECTCONTROL_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QSlider>
#include <QtWidgets/QSpinBox>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_canyyeffectcontrol
{
public:
    std::unique_ptr<QGridLayout> gridLayout;
    std::unique_ptr<QSlider> Threshold2Slider;
    std::unique_ptr<QLabel> Threshold1Label;
    std::unique_ptr<QLabel> ApertureSizeLabel;
    std::unique_ptr<QLabel> Threshold2Label;
    std::unique_ptr<QSpinBox>Threshold1Spin;
    std::unique_ptr<QSpinBox> Threshold2Spin;
    std::unique_ptr<QSpinBox> ApertureSizeSpin;
    std::unique_ptr<QSlider> ApertureSizeSlider;
    std::unique_ptr<QSlider> Threshold1Slider;
    std::unique_ptr<QCheckBox> EL2GLabel;

    void setupUi(QWidget *canyyeffectcontrol)
    {
        if (canyyeffectcontrol->objectName().isEmpty())
            canyyeffectcontrol->setObjectName(QStringLiteral("canyyeffectcontrol"));
        canyyeffectcontrol->resize(432, 210);
        canyyeffectcontrol->setMinimumSize(QSize(153, 119));
        canyyeffectcontrol->setMaximumSize(QSize(432, 210));
        gridLayout = std::unique_ptr<QGridLayout> (new QGridLayout(canyyeffectcontrol));
        gridLayout->setObjectName(QStringLiteral("gridLayout"));
        Threshold2Slider =  std::unique_ptr<QSlider>(new QSlider(canyyeffectcontrol));
        Threshold2Slider.get()->setObjectName(QStringLiteral("Threshold2Slider"));
        Threshold2Slider.get()->setOrientation(Qt::Horizontal);

        gridLayout.get()->addWidget(Threshold2Slider.get(), 4, 1, 1, 2);

        Threshold1Label = std::unique_ptr<QLabel> (new QLabel(canyyeffectcontrol));
        Threshold1Label.get()->setObjectName(QStringLiteral("Threshold1Label"));

        gridLayout.get()->addWidget(Threshold1Label.get(), 2, 0, 1, 1);

        ApertureSizeLabel = std::unique_ptr<QLabel> (new QLabel(canyyeffectcontrol));
        ApertureSizeLabel.get()->setObjectName(QStringLiteral("ApertureSizeLabel"));

        gridLayout.get()->addWidget(ApertureSizeLabel.get(), 5, 0, 1, 1);

        Threshold2Label =  std::unique_ptr<QLabel> (new QLabel(canyyeffectcontrol));
        Threshold2Label.get()->setObjectName(QStringLiteral("Threshold2Label"));

        gridLayout.get()->addWidget(Threshold2Label.get(), 4, 0, 1, 1);

        Threshold1Spin =  std::unique_ptr<QSpinBox> (new QSpinBox(canyyeffectcontrol));
        Threshold1Spin.get()->setObjectName(QStringLiteral("Threshold1Spin"));

        gridLayout.get()->addWidget(Threshold1Spin.get(), 2, 3, 1, 1);

        Threshold2Spin =  std::unique_ptr<QSpinBox> (new QSpinBox(canyyeffectcontrol));
        Threshold2Spin.get()->setObjectName(QStringLiteral("Threshold2Spin"));

        gridLayout->addWidget(Threshold2Spin.get(), 4, 3, 1, 1);

        ApertureSizeSpin =  std::unique_ptr<QSpinBox> (new QSpinBox(canyyeffectcontrol));
        ApertureSizeSpin.get()->setObjectName(QStringLiteral("ApertureSizeSpin"));

        gridLayout.get()->addWidget(ApertureSizeSpin.get(), 5, 3, 1, 1);

        ApertureSizeSlider =std::unique_ptr<QSlider> (new QSlider(canyyeffectcontrol));
        ApertureSizeSlider.get()->setObjectName(QStringLiteral("ApertureSizeSlider"));
        ApertureSizeSlider.get()->setOrientation(Qt::Horizontal);

        gridLayout->addWidget(ApertureSizeSlider.get(), 5, 1, 1, 2);

        Threshold1Slider =std::unique_ptr<QSlider> (new QSlider(canyyeffectcontrol));
        Threshold1Slider.get()->setObjectName(QStringLiteral("Threshold1Slider"));
        Threshold1Slider.get()->setOrientation(Qt::Horizontal);

        gridLayout.get()->addWidget(Threshold1Slider.get(), 2, 1, 1, 1);

        EL2GLabel = std::unique_ptr<QCheckBox> (new QCheckBox(canyyeffectcontrol));
        EL2GLabel.get()->setObjectName(QStringLiteral("EL2GLabel"));

        gridLayout.get()->addWidget(EL2GLabel.get(), 0, 0, 1, 1);


        retranslateUi(canyyeffectcontrol);

        QMetaObject::connectSlotsByName(canyyeffectcontrol);
    } // setupUi

    void retranslateUi(QWidget *canyyeffectcontrol)
    {
        canyyeffectcontrol->setWindowTitle(QApplication::translate("canyyeffectcontrol", "Canny effect control", 0));
        Threshold1Label.get()->setText(QApplication::translate("canyyeffectcontrol", "Threshold size 1", 0));
        ApertureSizeLabel.get()->setText(QApplication::translate("canyyeffectcontrol", "Aperture size", 0));
        Threshold2Label.get()->setText(QApplication::translate("canyyeffectcontrol", "Threshold size 2", 0));
        EL2GLabel.get()->setText(QApplication::translate("canyyeffectcontrol", "Enable L2G", 0));
    } // retranslateUi

};

namespace Ui {
    class canyyeffectcontrol: public Ui_canyyeffectcontrol {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_CANYYEFFECTCONTROL_H
like image 656
user2612344 Avatar asked Jul 25 '13 08:07

user2612344


2 Answers

Read up on how QObject derived classes manage memory - in a nutshell, if a QObject is constructed with a parent, then it will be destroyed when the parent is destroyed. In your example, it looks like everything is created as a child of canyyeffectcontrol, so those objects will be destroyed when that is.

like image 73
Paul Dixon Avatar answered Nov 02 '22 18:11

Paul Dixon


No ! You shouldn't modify Qt's generated files.

First reason (in the very header of the file generated) :

WARNING! All changes made in this file will be lost when recompiling UI file!

That means your modifications will be lost each time you modify even the tiniest bit of your UI (which is by itself a terrible problem, having to modify it time and time again with every UI change)

Secondly, Qt handles memory in its own way, with a mechanism of parent/child widgets that take care themselves of memory handling. You can find about this here and here.

For generated files, you shouldn't have to care about that. Then, for your own file (custom widgets for example), you shouldn't use delete either but look after QObject::deleteLater()

like image 35
JBL Avatar answered Nov 02 '22 18:11

JBL