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

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

13.02.2018, 10:12. Показов 4669. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru