Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
4 / 4 / 3
Регистрация: 28.08.2017
Сообщений: 81

Закрытие одной формы из другой

13.02.2018, 10:12. Показов 4774. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени, подскажите пожалуйста!
Не могу написать connect для закрытия двух форм, вторая форма все равно живет.
Как не пытался, не могу сообразить, как именно это описать.
Есть MainWindow, в нем создаю динамически форму Exit, через которое выполняю закрытие/перезапуск. Вот MainWindow закрывается, а вот вторую форму TSS не могу.
C++ (Qt)
1
2
3
4
5
6
7
8
void MainWindow::on_Exit_clicked()
{
    Exit *exit = new Exit();
    exit->show();
    Ui::TSS *tss;
    connect(exit, SIGNAL(signal_exit()), this, SLOT(close()));
    connect(exit, SIGNAL(signal_exit()),tss,SLOT(close()));
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.02.2018, 10:12
Ответы с готовыми решениями:

Посылка сигнала от кнопки одной формы в слот другой формы
Доброго времени, форумчане. Программировать на Qt начал совсем недавно - несколько дней назад. С++ тоже сравнительно недавно начал...

Вызов одной формы из другой
добрый день вообщем есть как бы проект соответственно со структурой 1)mainwindow.h 2)mainwindow.ui 3)mainwindow.cpp 4)mainwindow2.h...

Вызов из одной формы другой
Доброго времени суток. Есть головная форма, вызывающая побочную (диалоговую), задача которой принять ввод от юзера и вернуть управление...

32
 Аватар для Юля_программист
682 / 192 / 60
Регистрация: 04.05.2012
Сообщений: 886
Записей в блоге: 1
14.02.2018, 12:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от WhitePower_ Посмотреть сообщение
C++ (Qt)Выделить код

void MainWindow::on_Exit_clicked()
{
Exit *exit = new Exit();
* * exit->setAttribute(Qt::WA_DeleteOnClose);
* * exit->show();
* * connect(exit, SIGNAL(signal_exit()), this, SLOTSIGNAL(signal_exit()));
* * connect(exit, SIGNAL(signal_restart()),this, SLOTSIGNAL[/COLOR](signal_restart()));
}
А теперь смотрим в mainWindow.h
Цитата Сообщение от WhitePower_ Посмотреть сообщение
signals:
* * void signal_exit();
* * void signal_restart();
и читаем, что я написала
Цитата Сообщение от Юля_программист Посмотреть сообщение
Exit испускает сигнал, которые принимает mainwindow, и он же(mainwindow) испускает СИГНАЛ( signal_exit() или signal_restart()), который связан через коннект со слотом Form(в вашем случае TSS).
Цитата Сообщение от WhitePower_ Посмотреть сообщение
Я сам не пойму, почему он не находит слот СИГНАЛ
Все правильно, что он пишет у Вас и нет таких слотов,у Вас сигналы.

WhitePower_, Поняли ошибку??
0
4 / 4 / 3
Регистрация: 28.08.2017
Сообщений: 81
14.02.2018, 13:00  [ТС]
Юля_программист,
точно. С привычки набил. Я ни разу еще не пересылал сигнал. Читать про это читал, а использовать не приходилось. И еще такой вопрос. Можно ли единожды создавать динамическое окно, а то если много раз тыкать в кнопку их будет вылазить куча. Хотел через exec() закрыть кнопку, но этот метод почему-то не дает мне для exit.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.02.2018, 13:02
Цитата Сообщение от Юля_программист Посмотреть сообщение
Form fm;
* * MainWindow w;
Простите, что влез, толком не разобравшись, о чем речь идет.
Но вас не смущает, что вы создаете эти виджеты в стеке?
0
 Аватар для Юля_программист
682 / 192 / 60
Регистрация: 04.05.2012
Сообщений: 886
Записей в блоге: 1
14.02.2018, 13:13

Не по теме:

Байт,

а что конкретно смущает?



Добавлено через 6 минут
WhitePower_,
Я вижу два варианта:
1. Сделать окно Exit модальным для приложения. Это выставляется в дизайнере свойство windowModality, выбрать ApplicationModal . Тогда пока окно активно работать можно только в нем.

2. Если блокировать все приложение не надо, то в коде создания окна, можно использовать QPointer
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
void MainWindow::on_pushButton_clicked()
{
    static QPointer<Exit> exit;
   if(exit.isNull()){
    exit = new Exit();
   exit->setAttribute(Qt::WA_DeleteOnClose);
    exit->show();
    connect(exit,SIGNAL(signal_exit()),this,SIGNAL(signal_exit()));
    connect(exit,SIGNAL(signal_restart()),this,SIGNAL(signal_restart()));
   }
 
}
Не забываем подключить #include "qpointer.h".
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.02.2018, 13:43
Цитата Сообщение от Юля_программист Посмотреть сообщение
а что конкретно смущает?
Просто при выходе из функции они пропадут. но если это все происходит в функции main, то конечно, ничего страшного. При выходе из функции main пропадет все.
Просто я в самом начале освоения Qt наступил на эти грабли, модифицируя шлеевские примеры...

Не по теме:

А звездочки - это так форум цитирует...

0
4 / 4 / 3
Регистрация: 28.08.2017
Сообщений: 81
14.02.2018, 13:47  [ТС]
Байт,
а возможно ли из-за этого возникать проблемы с закрытием программы после перезапуска? Просто сейчас понял, что если допустим три раза перезапустить программу через Restart, то потом нужно три раза отправить сигнал на закрытие.
C++ (Qt)
1
2
3
4
5
6
7
8
void MainWindow::Restart()
{
    QStringList args = QApplication::arguments();
    args.removeFirst();
    QProcess::startDetached(QApplication::applicationFilePath(), args);
    QCoreApplication::quit();
 
}
0
 Аватар для Юля_программист
682 / 192 / 60
Регистрация: 04.05.2012
Сообщений: 886
Записей в блоге: 1
14.02.2018, 13:51
Байт,
Да это все main происходит.
Хм...а что Вы тогда предлагаете? в случае, когда все в main? Ведь насколько я знаю main существует пока есть хоть одно окно. И соответственно все хорошо, но я могу ошибаться. Хотелось бы узнать Ваше видение этого вопроса.


Меня тут смущает только то, что не вызываются деструкторы MainWindow и Form при выходе, через пользовательскую кнопку. Но я пока никак не найду причину. И как мне кажется в этом приложении утечка памяти. Хотя я могу и ошибаться, так как только начинаю разбираться с понятием утечки.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.02.2018, 13:51
Цитата Сообщение от WhitePower_ Посмотреть сообщение
а возможно ли из-за этого возникать проблемы с закрытием программы после перезапуска
Не знаю. Не думаю. Я креаторам не пользуюсь, и что делает кнопка Restart просто не знаю.
0
 Аватар для Юля_программист
682 / 192 / 60
Регистрация: 04.05.2012
Сообщений: 886
Записей в блоге: 1
14.02.2018, 13:52
WhitePower_, выложите весь исходник архивом.
Не очень мне ясно, что значит
Цитата Сообщение от WhitePower_ Посмотреть сообщение
Просто сейчас понял, что если допустим три раза перезапустить программу через Restart, то потом нужно три раза отправить сигнал на закрытие.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.02.2018, 13:58
Цитата Сообщение от Юля_программист Посмотреть сообщение
Да это все main происходит.
Ну, тогда ничего страшного.
Просто я всегда создаю виджеты в куче.
C++ (Qt)
1
2
Типа Form *fm = new Form;
WainWindow *w = new MainWindow;
Это на тот случай, если мне вдруг захочется перенести этот кусок в другую функцию (метод). Но диалоги, да, почти всегда на стеке. Как правило, при выходе из метода они уже никому не нужны.
0
 Аватар для Юля_программист
682 / 192 / 60
Регистрация: 04.05.2012
Сообщений: 886
Записей в блоге: 1
14.02.2018, 14:05
Байт, поняла
0
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536
14.02.2018, 15:48
Цитата Сообщение от Байт Посмотреть сообщение
Но диалоги, да, почти всегда на стеке. Как правило, при выходе из метода они уже никому не нужны.
Я вообще в конструкторе диалогов явно указываю удалиться по закрытию, а там уже не важно, как оно создается.
Вообще диалоги привык делать специфические, под свои нужды, потому и могу себе позволить трогать конструкторы
0
4 / 4 / 3
Регистрация: 28.08.2017
Сообщений: 81
15.02.2018, 15:03  [ТС]
Юля_программист, разобрался. При Restarte память не чистилась. Запускалось новое приложение и закрывалась только форма. В итоге сделал через exit(0), как только запускается новая форма, старую закрываем методом exit. Спасибо за помощь!
Цитата Сообщение от Юля_программист Посмотреть сообщение
WhitePower_, выложите весь исходник архивом.
Не очень мне ясно, что значит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2018, 15:03

Вызов одной формы из другой
Нужно вызвать форму2 по нажатию кнопочки на форме1, как я могу это осуществить? Добавил в проект .ui файл второй формы, что нужно...

Вызов одной формы из другой и наоборот
Нужно реализовать вот такую ​​штуку: есть одна форма создана дизайнером, на ней есть кнопка которая создает другую форму и скрывает себя,...

Передача информации от одной формы к другой
Добрый вечер, передаю пару строк от одного окна для отображения в другом, делаю так, отправляю(из основной формы) void...

Заполнение виджетов одной формы из другой
Ситуация сл. Из главной формы открываю другую, в этой самой другой выбираю ини файл, передаю путь к нему в главную. В главной есть...

Открытие одной и закрытие другой формы
как сделать так что бы при нажатии на кнопку старая форма закрывалась полностью, и открывалась новая прописывал это, но старая форма все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru