Скорее всего, вы пытаетесь использовать уничтоженный экземпляр MainWindow
. Возможно, вы по ошибке установили атрибут QT_WADeleteOnClose
в окне. Следующий автономный пример демонстрирует эту проблему. Атрибут может быть установлен в файле .ui
, и вы можете не знать о нем.
![screenshot of the example application](https://i.stack.imgur.com/qdDJ5.png)
// https://github.com/KubaO/stackoverflown/tree/master/questions/mainwindow-crash-double-delete-58305305
#include <QtWidgets>
class Window : public QMainWindow {
QWidget central;
QGridLayout layout{¢ral};
QLabel label{"Hello, World!"};
QCheckBox crash{"Crash on exit"};
public:
static bool alive;
Window() {
alive = true;
layout.addWidget(&label, 0, 0);
layout.addWidget(&crash, 1, 0);
setCentralWidget(¢ral);
connect(&crash, &QCheckBox::toggled, this, [this](){
setAttribute(Qt::WA_DeleteOnClose, crash.isChecked());
});
}
~Window() {
qDebug() << __FUNCTION__;
alive = false;
}
};
bool Window::alive;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
int rc;
{
Window w;
w.show();
rc = a.exec();
Q_ASSERT(w.alive);
w.setWindowTitle("A New Title Awaits");
qDebug() << "We're past w.setWindowTitle()";
}
return rc;
}