Закрытие нового окна не для детей в Qt - PullRequest
3 голосов
/ 20 июня 2009

я пытаюсь сделать 2 окна. 2-й должен быть вызван в 1-м. Я не связываю их child-> parent. Но когда я позвонил во 2-е окно и закрыл его, 1-е окно тоже закрылось. Что я должен делать? Оба окна унаследованы от QWidget. C ++ и Qt


Извините за мое плохое описание. У меня есть главное окно. Класс, унаследованный от QMainWindow. Это я создал 2-е окно. Класс, унаследованный от QWidget. В первом (главное окно) я создаю и вызываю второе окно

ConfigWindow *ConfWindow = new ConfigWindow();
ConfWindow->show();

Без указания ссылки на родителя. Все работает нормально, но когда я закрываю второе окно (config-window), мое главное окно тоже закрывается. Мне не нужно в этом. Что нужно сделать, чтобы заблокировать закрытие главного окна после закрытия окна конфигурации.

Надеюсь, опишу чуть лучше.

Мое первое окно имеет следующие флаги:

this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);

Без них все в порядке. Могу ли я что-то изменить, если мне нужны эти флаги в моем окне?

Ответы [ 2 ]

10 голосов
/ 23 июня 2009

Вам нужно что-то вроде:

QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);

Вот тестовая программа: http://pastebin.com/f5903c5f4.

Осторожно, теперь вам нужно явно вызвать quit () в деструкторе вашего главного окна.

Если вы прочитаете документацию QApplication :: quitOnLastWindowClosed , вы обнаружите, что:

Если это свойство имеет значение true, приложения закрываются, когда закрывается последнее видимое главное окно (т.е. окно без родительского элемента) с набором атрибутов Qt :: WA_QuitOnClose. По умолчанию этот атрибут установлен для всех виджетов, кроме вложенных окон

Поскольку ваше главное окно является (безрамным) окном инструмента, оно считается. Это оставляет ConfWindow как единственный виджет верхнего уровня, не относящийся к окнам. Таким образом, если вы закроете ConfWindow, это вызовет завершение экземпляра приложения.

0 голосов
/ 21 июня 2009

Если это код, то в Qt есть огромная ошибка.
Код выше никогда не должен закрывать вашу первую Windows, должно быть что-то еще не так.
Приложение закрыто или происходит сбой?

Примечание
Кто удаляет configWindow? Существует атрибут Qt::WA_DeleteOnClose, который удаляет окно после его закрытия.

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();
...