Russian Qt Forum

Qt => Вопросы новичков => Тема начата: pas от Май 23, 2021, 22:40



Название: [РЕШЕНО]QT уничтожение дочернего окна при закрытии
Отправлено: pas от Май 23, 2021, 22:40
Всем здравствовать.
Есть основное окно 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();
}


Название: Re: QT уничтожение дочернего окна при закрытии
Отправлено: kambala от Май 23, 2021, 23:45
Выставить дочернему окну атрибут Qt::WA_DeleteOnClose, подробно описано в https://doc.qt.io/qt-5/qcloseevent.html


Название: Re: QT уничтожение дочернего окна при закрытии
Отправлено: pas от Май 23, 2021, 23:51
Спасибо.