Russian Qt Forum
Ноябрь 22, 2024, 21:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]QT уничтожение дочернего окна при закрытии  (Прочитано 3504 раз)
pas
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« : Май 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();
}
« Последнее редактирование: Май 23, 2021, 23:52 от pas » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Май 23, 2021, 23:45 »

Выставить дочернему окну атрибут Qt::WA_DeleteOnClose, подробно описано в https://doc.qt.io/qt-5/qcloseevent.html
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
pas
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« Ответ #2 : Май 23, 2021, 23:51 »

Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 22.