Вопрос

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


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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

  

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

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

Другие советы

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

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

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top