2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
1 | |
Как вызвать функцию в дочерней форме04.10.2015, 21:35. Показов 2501. Ответов 20
Метки нет (Все метки)
Создаю в основной форме новую форму через
Код
NewForm *newForm = new NewForm(this); newForm->show(); newForm->setAttribute(Qt::WA_DeleteOnClose); Код
newForm->func();
0
|
04.10.2015, 21:35 | |
Ответы с готовыми решениями:
20
Как правильно передать вектор в функцию и вызвать эту функцию? Меню в дочерней форме Как вызвать c++ функцию? Как вызвать функцию в Qt с переменной, которая берется из другой формы? |
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
|
|
04.10.2015, 22:11 | 2 |
Можно пойти в лоб и создавать отдельный поток.
Но думаю, что лучше будет сделать функцию дочернего окна слотом, и в основной форме вызывать ее через сигнал. В таком случае в connect нужно обязательно указать флаг Qt::QueuedConnection.
1
|
2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
04.10.2015, 23:46 [ТС] | 3 |
у меня много одинаковых форм. и если я делаю через сигнал, то я обращаюсь сразу ко всем этим формам. А мне нужно к одной.
Как можно запустить саму форму в отдельном потоке?
0
|
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
|
||||||
05.10.2015, 00:05 | 4 | |||||
В таком случае можно определить в дочерней форме две функции:
Через метод show форма вызывается в отдельном потоке. Иначе у вас активна была бы только одна форма.
1
|
2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
05.10.2015, 00:53 [ТС] | 5 |
а можно, как-то сделать чтоб после вызова show, сразу выполнялся какой-то метод этой формы?
0
|
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
|
||||||
05.10.2015, 01:06 | 6 | |||||
Можно переопределить функцию show
1
|
690 / 463 / 161
Регистрация: 01.10.2015
Сообщений: 1,272
|
|
05.10.2015, 01:12 | 7 |
скажите, а можно переопределить обработчик события show, ведь оно генерируется в том числе и после вызова show()? и в нем что-либо выполнить или вызвать метод
0
|
2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
05.10.2015, 01:57 [ТС] | 8 |
Я сделал так:
создаю новую форму, в которой коннекчу сигнал на запуск нужной функции. запускаю сигнал. В этой самой функции я диссконекчу сигнал. и вроде все норм, сигнал в итоге доходит только до одной формы. Но когда я создаю новую форму, действия в других формах прекращаются до тех пор, пока не закончится действие в новой форме... Добавлено через 18 минут Как можно тупо запустить новую форму, чтоб она работала вообще независимо от остальных?
0
|
690 / 463 / 161
Регистрация: 01.10.2015
Сообщений: 1,272
|
||||||
05.10.2015, 04:28 | 9 | |||||
Любой процесс при запуске имеет хотя один поток, так как сам по себе процесс не исполняется, этот первый поток является основным. Поток на всем протяжении своего существования обрабатывает цикл событий, все сообщения и события попадают в этот цикл, и поток поочередно обрабатывает их (хотя есть виды событий, обрабатываемых асинхронно). Описанная вами ситуация означает, что все исполняется в одном потоке и все события обрабатываются в цикле событий главного потока - пока поток занят отработкой события из дочерней формы, события родительской попадают в очередь... и если выполняемая операция является затратной в смысле времени выполнения, то она блокирует всю очередь. Чаще всего это операции ввода-вывода (файловая система, работа через сеть с большими задержками, и тому подобные вещи), продолжительность которых вам заранее не известна и не прогнозируема. Можно... но сперва лучше проанализировать узкие места существующей реализации, найти все блокирующие операции, и если они не связаны с визуализацией гуя, то вынести все это дело в отдельные классы, код которых и будет выполняться в отдельном потоке/потоках, а основной поток будет отвечать только за интерфейс с пользователем. ИМХО: если ТС все же примет решение еще и графический интерфейс "раскидать" по разным потокам, к чему он явно склоняется - то это заведомо тупиковый путь
0
|
2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
05.10.2015, 04:43 [ТС] | 10 |
а если выносить в отдельный поток функции из этой формы, то будет нормально? Если да, то как это сделать?
через QtConcurrent не понимаю, как связываться коннектом с потоком?
0
|
690 / 463 / 161
Регистрация: 01.10.2015
Сообщений: 1,272
|
||||||||||||||||
05.10.2015, 04:54 | 11 | |||||||||||||||
Это одна из возможных сигнатур метода connect:
Или я неверно понял смысл вашей фразы относительно множества одинаковых форм? Добавлено через 3 минуты а что она собственно делает?
0
|
2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
05.10.2015, 05:01 [ТС] | 12 |
получится, если вызывать функцию где все это создается много раз.
Когда я запустил форму и функцию на ней, в основной форме мне уже не важно что с это дочерней формой будет дальше. передает пакеты по QUdpSocket
0
|
2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
05.10.2015, 05:01 [ТС] | 13 |
del
0
|
690 / 463 / 161
Регистрация: 01.10.2015
Сообщений: 1,272
|
|
05.10.2015, 05:08 | 14 |
вы встроили QUdpSocket в графический виджет?
можно код проекта посмотреть? Добавлено через 1 минуту я тоже получил 502 ошибку, gateway error
0
|
2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
05.10.2015, 05:11 [ТС] | 15 |
да нет) в графический виджет я вывожу прогрессбар)
+ еще подскажите при закрытии данной формы, если функция не закончила работу, выпадает segmentation fail. посмотрел через дебаг, при закрытии вызывается деструктор, а функция продолжает работу... как быть?
0
|
690 / 463 / 161
Регистрация: 01.10.2015
Сообщений: 1,272
|
|
05.10.2015, 05:13 | 16 |
закиньте проект в виде zip-вложения, мне все интереснее и интереснее становится))) а также все "непонятнее"...
1
|
2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
05.10.2015, 05:18 [ТС] | 17 |
да ну... там много всего закомменчено, много неиспользуемого. разбираться долго придется.
В чем суть: при нажатии кнопки на основной форме создается моя дочерняя форма(она представляет собой отдельный класс), которая передает пакеты по сокету и выводит прогресс(кол-во пакетов из всего пакетов) на прогрессбар. Вот и всё)
0
|
690 / 463 / 161
Регистрация: 01.10.2015
Сообщений: 1,272
|
|
05.10.2015, 05:24 | 18 |
вторичная форма никак не взаимодействует с исходной?
т.е. она просто инициирует запуск передачи через сокет, а статистика (передано n из м + прогресс-бар) выводится во вторичку? количество и формат датаграмм жестко прошиваете в коде? все-таки с кодом было бы проще, посмотреть, как именно у вас реализовано
1
|
2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
05.10.2015, 05:25 [ТС] | 19 |
0
|
690 / 463 / 161
Регистрация: 01.10.2015
Сообщений: 1,272
|
|
05.10.2015, 05:31 | 20 |
сейчас попробую набросать код, отпишусь тогда попозже
1
|
05.10.2015, 05:31 | |
05.10.2015, 05:31 | |
Помогаю со студенческими работами здесь
20
Как во второй форме вызвать процедуру или функцию созданную в первой форме Как в дочерней форме определить какой контрол нажат в родительской форме Как передать данные из MDI дочерней формы к Родительской форме? Как получить значение из ячейки текущей строки DataGridView в дочерней форме? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |