это может походить на очень простой вопрос, но я хочу вывести некоторые данные каждый раз, когда QMainWindow
завершения, таким образом, я использовал следующую часть кода:
QObject::connect(MainWindow.centralwidget, SIGNAL(destroyed()), this, SLOT(close()));
Но это, кажется, не заставляет его звонить close()
. Я делаю эту несправедливость?.
Разве centralwidget не, предполагают, чтобы быть уничтоженным?.
Или возможно завершения приложения прежде close()
может быть назван?.
Какие-либо другие способы сделать его затем?
Я бы попробовал QGuiApplication::lastWindowClosed() вместо этого.
Вам лучше повторно реализовать одну виртуальную функцию в вашем основном классе 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
}
Удачи.
Не могли бы вы реализовать функцию closeEvent
для своего QMainWindow
и поместить туда свой код?
Как насчет добавления кода дампа в деструктор главного окна?
Ваш первоначальный вопрос и код не совпадают. Если вы хотите что-то сделать с QMainWindow
, либо создайте подкласс и повторно реализуйте closeEvent
, либо подключитесь к MainWindow :: destroy ()
. Тем не менее, смотрите 3-й абзац для примечания.
Но ваш код показывает то, что кажется третьим классом, который подключает дочерний элемент уничтожаемого MainWindow
к некоторому слоту с именем close ()
. centralwidget
будет уничтожен ПОСЛЕ того, как MainWindow уже будет уничтожен, так что это, скорее всего, вам все равно не поможет.
Кроме того, это зависит от того, как вы создали MainWindow (стек или кучу) и правильно ли вы его уничтожаете. В идеале вы должны создать подкласс QMainWindow
(который, если вы использовали конструктор, у вас, вероятно, уже есть).