Witam.
Napisałem program składający się z dwóch klas MainWindow i BazaDanych. Pierwsza klasa ma 2 przyciski- jeden po nacisnieciu tworzy tą drugą i wypełnia(szczegóły w kodzie), natomiast drugi usuwa ją. Z tym, że no właśnie nie do końca usuwa, bo pamięci zwalnia się tyle co nic(w menedzeże pokazuje, że usuwa niecałe 2 mega z 50mb które ta klasa stworzyła) . I tu właśnie rodzi się pytanie jak usunąć dany obiekt/klasę ze wszystkim co ona stworzyła dynamicznie. W moim przypadku są to obiekty QStandardItems. Wiem, że QT ma coś takiego, że jak się usuwa rodzica to automatycznie usuwa jego "dzieci", ale chyba nie w tym przypadku.
Plik mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QHBoxLayout>
#include "bazadanych.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
QHBoxLayout *layout;
BazaDanych *baza;
QPushButton *button1,*button2;
private slots:
void createBase();
void deleteBase();
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
plik mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
baza = 0;
button1 = new QPushButton("stworz",this);
button2 = new QPushButton("usun",this);
layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
centralWidget()->setLayout(layout);
connect(button1,SIGNAL(clicked()),this,SLOT(createBase()));
connect(button2,SIGNAL(clicked()),this,SLOT(deleteBase()));
}
void MainWindow::createBase(){
if(!baza) //Stworzenie klasy baza
baza = new BazaDanych();
baza->CreateModel(); //wypełnienie jej
}
void MainWindow::deleteBase(){
if(baza)
{
delete baza; //Usuwanie tej klasy nie usuwa jej wszystkich elementów?
baza = 0;
}
MainWindow::~MainWindow()
{
delete ui;
}
plik bazadanych.h:
#ifndef BAZADANYCH_H
#define BAZADANYCH_H
#include <QObject>
#include <QStandardItem>
#include <QStandardItemModel>
class BazaDanych : public QObject
{
Q_OBJECT
QStandardItem *itemMark,*itemEngineSize,*itemPower,*itemMileage,*itemColour,*itemDamage,*itemYear;
QStandardItemModel *model;
int rowcount;
public:
explicit BazaDanych(QObject *parent = 0);
void CreateModel();
~BazaDanych();
signals:
public slots:
};
#endif // BAZADANYCH_H
plik bazadanych.cpp
#include "bazadanych.h"
BazaDanych::BazaDanych(QObject *parent) :
QObject(parent)
{
model = 0;
}
void BazaDanych::CreateModel(){
if(!model){
model = new QStandardItemModel;
model->insertRow(1);
}
for (int i = 0; i < 50000; i++){
rowcount = model->rowCount();
//wypełnianie modelu przez QStandardItem
model->setItem(rowcount,0,itemMark = new QStandardItem("jakas wartosc"));
model->setItem(rowcount,1,itemEngineSize = new QStandardItem("jakas wartosc"));
model->setItem(rowcount,2,itemPower = new QStandardItem("jakas wartosc"));
model->setItem(rowcount,3,itemYear = new QStandardItem("jakas wartosc"));
model->setItem(rowcount,4,itemMileage = new QStandardItem("jakas wartosc"));
model->setItem(rowcount,5,itemColour = new QStandardItem("jakas wartosc"));
model->setItem(rowcount,6,itemDamage = new QStandardItem("jakas wartosc"));
}
}
BazaDanych::~BazaDanych(){
model->clear(); //Czysci model, ale nie usuwa QStandardItem?
delete model; //Tak samo nie usuwa QStandardItem.
}
EDIT: Znalazłem taką informację:
QStandardItemModel::~QStandardItemModel ()
Destructs the model. The model destroys all its items.
Jak to użyć/zaimplementować?