Спокойный QMainWindow в завершении

это может походить на очень простой вопрос, но я хочу вывести некоторые данные каждый раз, когда QMainWindow завершения, таким образом, я использовал следующую часть кода:

QObject::connect(MainWindow.centralwidget, SIGNAL(destroyed()), this, SLOT(close()));

Но это, кажется, не заставляет его звонить close(). Я делаю эту несправедливость?.
Разве centralwidget не, предполагают, чтобы быть уничтоженным?.

Или возможно завершения приложения прежде close() может быть назван?.

Какие-либо другие способы сделать его затем?

10
задан CaptJak 5 April 2016 в 22:57
поделиться

5 ответов

Я бы попробовал QGuiApplication::lastWindowClosed() вместо этого.

10
ответ дан 3 December 2019 в 13:50
поделиться

Вам лучше повторно реализовать одну виртуальную функцию в вашем основном классе MainWindow следующим образом:

class MainWindow : public QMainWindow {

    Q_OBJECT;

public:
    MainWindow();

protected:
     void closeEvent(QCloseEvent *event);
}

, а затем объявить в исходном файле:

void MainWindow::closeEvent(QCloseEvent *event) {
     // do some data saves or something else
}

Удачи.

24
ответ дан 3 December 2019 в 13:50
поделиться

Не могли бы вы реализовать функцию closeEvent для своего QMainWindow и поместить туда свой код?

4
ответ дан 3 December 2019 в 13:50
поделиться

Как насчет добавления кода дампа в деструктор главного окна?

-1
ответ дан 3 December 2019 в 13:50
поделиться

Ваш первоначальный вопрос и код не совпадают. Если вы хотите что-то сделать с QMainWindow , либо создайте подкласс и повторно реализуйте closeEvent , либо подключитесь к MainWindow :: destroy () . Тем не менее, смотрите 3-й абзац для примечания.

Но ваш код показывает то, что кажется третьим классом, который подключает дочерний элемент уничтожаемого MainWindow к некоторому слоту с именем close () . centralwidget будет уничтожен ПОСЛЕ того, как MainWindow уже будет уничтожен, так что это, скорее всего, вам все равно не поможет.

Кроме того, это зависит от того, как вы создали MainWindow (стек или кучу) и правильно ли вы его уничтожаете. В идеале вы должны создать подкласс QMainWindow (который, если вы использовали конструктор, у вас, вероятно, уже есть).

1
ответ дан 3 December 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: