2013-07-25 8 views
5

を割り当て解除していません。これはQt uiファイルから生成されたコードです。このコードではnewというキーワードを使用してメモリを割り当てますが、割り当てられたリソースを削除するにはdeleteキーワードがクラスに含まれていません。 qtの開発者か何か他のリソースがありません(割り当てられていないリソースはありません)?Qt UIジェネレータはリソース

/******************************************************************************** 
** 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 

それは私が(例えばunique _ptr)のメモリを解放するためにコードを書き換える必要があり、コードはQObject派生クラスがメモリを管理する方法についての記事を読むまで、この

/******************************************************************************** 
** 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 
+0

そのコードの壁を重要な部分に切り分けることができますか? – arne

答えて

5

のようでなければならないことを意味している - に一言で言えば、QObjectが親で構築されている場合、親が破棄されると破棄されます。あなたの例では、すべてがcanyyeffectcontrolの子として作成されているように見えるので、それらのオブジェクトは破棄されます。

0

Qtフレームワークは、親子関係のツリーを構築します。たとえば、QSliderのコンストラクタ引数は親です。親を破壊すると、すべての子どもたちも再帰的に破壊されるので、親子関係が正しいとすれば、何かをきれいにする必要はありません。

メモリがまだ残っている場合(valgrindで確認)、これはQtのバグであるか、関係を正しく設定していない可能性があります。

3

いいえ! Qtの生成ファイルは変更しないでください。

(生成されたファイルの非常にヘッダー内の)第一の理由:

WARNING! UIファイルを再コンパイルすると、このファイルのすべての変更が失われます!変更内容は、(すべてのUIの変更に再び時間と時間を変更すること、それ自体で恐ろしい問題です)、あなたのUIのも、最も小さいビットを変更するたびに失われることを意味します

第2に、Qtは独自の方法でメモリを扱い、親/子ウィジェットのメカニズムはメモリ処理に注意を払います。これについてはherehereがあります。

生成されたファイルの場合、そのファイルを気にする必要はありません。次に、あなた自身のファイル(例えばカスタムウィジェット)の場合は、deleteのいずれかを使用しないでください。QObject::deleteLater()

関連する問題