2016-12-13 6 views

ответ

1

Если QApplication exec() уже запущен, вы shold все еще быть в состоянии открыть QMainWindow, но, в вашем примере, вы создаете MainWindow на стек внутри ваших функций, и область действия заканчивается сразу после вызова show().

Это означает, что объект MainWindow будет освобожден после возвращения функции pushButton_clicked().

Совет. Переместите объявление своего MainWindow в другом месте, например. дать ему глобальный масштаб или переместить его в декларации своего собственного класса QApplication и т.д.

+0

Вы являетесь примером. @Steeve –

1

В дополнение к Steeves answer можно также изменить код на

MainWindow *w = new MainWindow(); 
    w->setAttribute(Qt::WA_DeleteOnClose); 
    w->show(); 

Распределение по куче будет препятствовать прямой " освобождение ", а WA_DeleteOnClose гарантирует, что Memeory освобождается при закрытии окна.

Это хороший способ, если вы хотите автономное Окно, для которого вы не знаете Область.

+0

Окно Qdialog работает в Mainwindow. Когда этот код написан в QDialog, QDialog снова открывается. Он не открывает Майнвиндоу. @ ab.o2c –

+0

Вы вызываете диалог в конструкторе или функцию show() MainWindow? –

+0

int main (int argc, char * argv) {QApplication a (argc, argv); QDialog w; w.show(); return a.exec(); } // MainWindow class @ ab.o2c –