Всем здравствовать.
Есть основное окно MW, есть дочернее окно Qwidget. Из основного открываю дочернее, все номально. На дочернем нажимаю крестик в правом верхнем углу окно закрыцвается. И я считал, что дочернее окно при этом уничтожается.
В класс дочернего окна добавил слот, а родительский класс добавил сигнал, который срабатявает раз в секунду. И что я вижу? После закрытия дочернего окна, оно по прежнему получает и обрабатывает сигналы. Если форму вызвать второй раз, то она будет выводить "сдвоенное" сообщение т.е.
Как сделать, что бы дочернее окно уничтожалось при его закрытии?
Заголовок дочерней формы:
#ifndef GRAPHVIEW_H
#define GRAPHVIEW_H
#include "mainwindow.h"
#include <QWidget>
namespace Ui {
class GraphView;
}
class GraphView : public QWidget
{
Q_OBJECT
public:
explicit GraphView(MainWindow *parent = nullptr);
QVector<MainWindow::Record> *timeData;
~GraphView();
public slots:
void dataUpdated();
private slots:
void on_pushButton_clicked();
private:
Ui::GraphView *ui;
};
#endif // GRAPHVIEW_H
Реализация дочерней формы:
#include "graphview.h"
#include "ui_graphview.h"
#include <stdio.h>
#include <iostream>
GraphView::GraphView(MainWindow *parent) :
QWidget(parent),
ui(new Ui::GraphView)
{
ui->setupUi(this);
timeData=&parent->timeData;
std::cout << "Записей: " << QString::number(timeData->count()).toStdString()<< std::endl;
connect(parent,SIGNAL(dataUpdated()),this, SLOT(dataUpdated()));
}
GraphView::~GraphView()
{
delete ui;
}
void GraphView::on_pushButton_clicked()
{
std::cout << "Записей: " << QString::number(timeData->count()).toStdString()<< std::endl;
}
void GraphView::dataUpdated()
{
std::cout << "Записей: " << QString::number(timeData->count()).toStdString()<< std::endl;
}
Вызов дочерней формы по нажатию на пункте всплывающего меню главного окна:
void MainWindow::action_1()
{
GraphView *gw=new GraphView(this);
gw->setWindowFlags(Qt::Window);
gw->show();
}