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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Вопросы новичков / Re: QT уничтожение дочернего окна при закрытии : Май 23, 2021, 23:51
Спасибо.
2  Qt / Вопросы новичков / [РЕШЕНО]QT уничтожение дочернего окна при закрытии : Май 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();
}
Страниц: [1]

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