Наследование событий (events) в qt

100
26 мая 2021, 07:40

Есть главное окно QMainWindow

  • внутри есть классы виджетов, один из них это QPushButton ( при нажатии соединяется с close() )
  • есть также обработчик событий который спрашивает при выходе

Борюсь с этой проблемой уже третий день При выходе по кнопке "Выход" закрывается виджет. Как унаследовать событие закрытия главного окна?

mainwindow.h

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    virtual void closeEvent (QCloseEvent *event);
    StartWindow *startWindow;
};

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    startWindow = new StartWindow;
}
void MainWindow::closeEvent (QCloseEvent *event)
{
   //переопределила
}

startwindow.h

class StartWindow : public QWidget
{
    Q_OBJECT
public:
    explicit StartWindow(QWidget *parent = nullptr);
private slots:
    void slotQuit();
private:
    virtual void closeEvent (QCloseEvent *event);
};

startwindow.cpp

StartWindow::StartWindow(QWidget *parent) : QWidget(parent)
{
    butQuit = new QPushButton(tr("Выход"));
    hLayout = new QHBoxLayout(this);
    hLayout->addWidget(butQuit, 2);
    setLayout(hLayout);
    // соединение кнопок с слотами
    connect(butQuit, SIGNAL(clicked()), this, SLOT(slotQuit()));
}
void StartWindow ::slotQuit()
{
    this -> close();
}
void StartWindow::closeEvent (QCloseEvent *event)
{
    // переопределила
}

В главном окне, должен меняться виджет при нажатии на кнопки, но при нажатии на Выход, закрывается сам виджет

Как сделать чтобы при нажатии на кнопку в Виджете, (который в главном окне) закрывалось главное окно?

Answer 1

Возможно есть стандартные средства, но мне приходит идея реализовать сигнал у StartWindow и подписать на это событие MainWindow.

startwindow.h

#ifndef STARTWINDOW_H
#define STARTWINDOW_H
#include <QWidget>
#include <QMessageBox>
#include <QPushButton>
#include <QCloseEvent>
#include <QHBoxLayout>
#include <QVBoxLayout>
class StartWindow : public QWidget
{
    Q_OBJECT
public:
    explicit StartWindow(QWidget *parent = nullptr);
signal:
    void closedWindow(QCloseEvent *event)
private slots:
    void slotQuit();
private:
    QPushButton *butQuit;
    QPushButton *butStart;
    QHBoxLayout *hLayout;
    virtual void closeEvent (QCloseEvent *event);
};
#endif // STARTWINDOW_H

*.cpp

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    startWindow = new StartWindow;
    setCentralWidget(startWindow);
    connect(startWindow, &StartWindow::closedWindow,
            this, [this] (event) { closeEvent(event); });
}
void StartWindow::closeEvent (QCloseEvent *event) {
    // some code
    emit closedWindow(event);
}
READ ALSO
Вопрос по QProcess

Вопрос по QProcess

Мне нужно реализовать работу с терминалом из приложенияЗадача состоит в том что бы через ssh на сервер кидать проект,компилить его там,и возвращать...

161
Защитить svg картинки

Защитить svg картинки

На сайте есть множество svg картинок,подскажите как лучше их защитить от копирования и есть ли смысл это делать?Сейчас можно просто посмотреть...

127