2 / 2 / 0
Регистрация: 03.06.2012
Сообщений: 56
|
|
1 | |
Как вызвать функцию в дочерней форме04.10.2015, 21:35. Показов 2535. Ответов 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 в дочерней форме? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Какой язык программирования лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
|
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
|
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
|
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
|
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
|
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
|
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
|
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
|
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций
История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
|
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
|
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы
В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
|
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
|