Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
 Аватар для Robesper3411
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 535
Записей в блоге: 1

Запуск QWindow.show() в отдельном потоке

24.12.2019, 11:57. Показов 5588. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Стоит задача - создать окно в программе с которого должно происходить управление ее логикой. В бизнес-логике запущен бесконечный цикл, и она должна выполняться вне зависимости от того, что происходит с формой. Было принято решение передать форму через сеттер. При этом запустить ее отображение в отдельном потоке. Но форма не отображается. Почему она не отображается - не понятно. В Windows Forms есть два метода, которые выполняют подобные вещи(Show/ShowDialog), может здесь есть что-то похожее?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
QApplication a(argc, argv);
 
MainWindow *window = new MainWindow();
thread t(&MainWindow::show, window);
 
MovementManager *manager = new Manager();
manager->SetWindow(*window);
 
t.join();
return a.exec();
Просьба сильно не пинать - с формами в Qt раньше почти не работал.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.12.2019, 11:57
Ответы с готовыми решениями:

QGraphicsScene в отдельном потоке
Доброе утро. Подскажите пожалуйста.Всего три потока: Гуи, Идет прием UDP, обработка . Принимаются множество "пакетов" и из...

QCamera в отдельном потоке
Пытаюсь запустить камеру в отдельном потоке camera=new QCamera(source); ...

Логирование в отдельном потоке
class logSystem: public QObject { Q_OBJECT private: QFile _file; QTextStream _stream; bool _timeshamp; ...

11
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
24.12.2019, 12:51
Цитата Сообщение от Robesper3411 Посмотреть сообщение
Стоит задача - создать окно в программе с которого должно происходить управление ее логикой.
Запустить окно в отдельноп потоке, ятд, возможно, только зачем? Создайте основное окно, параллельно с ним запустите поток, в котором будет выполняться бизнес-логика, и перед этим соедините их сигнально-слотовыми соединениями. И все, управляйте логикой из главного окна через сигналы/слоты.
1
191 / 151 / 61
Регистрация: 08.04.2010
Сообщений: 1,032
24.12.2019, 12:51
отоброжение может быть только в одном потоке. Бесконечный цикл не дает отрисовать окно. Обновление данных на форме делается через таймер.
1
 Аватар для Robesper3411
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 535
Записей в блоге: 1
24.12.2019, 14:04  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Запустить окно в отдельноп потоке, ятд, возможно, только зачем?
я хочу, чтобы у меня бизнес-логика выполнялась в главном потоке, так как события формы просто вносят некоторые коррективы. То есть первична бизнес-логика, к тому же есть вероятность, что управление может стать консольным.
Я хочу сделать так:
1 Запустил бесконечный цикл
2 Начал проверять состояние переменных, которые хранит окно и которые меняются, если начать щелкать кнопочки
2.1 В случае выполнения условия - выполняется один алгортим бизнес-логики
2.2 В случае невыполнения условия - другой алгоритм бизнес-логики
но не получается, так как
Цитата Сообщение от Dovgon Посмотреть сообщение
Бесконечный цикл не дает отрисовать окно
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
24.12.2019, 14:13
Цитата Сообщение от Robesper3411 Посмотреть сообщение
я хочу, чтобы у меня бизнес-логика выполнялась в главном потоке
Повторю вопрос: зачем? Так не делается. Длительные задачи выполняются в своем, отдельном от GUI потоке выполнения.
Цитата Сообщение от Robesper3411 Посмотреть сообщение
есть вероятность, что управление может стать консольным.
Это не меняет совершенно ничего. Логика действий остается та же (скажу больше, я сам, как правило, всю бизнес-логику отлаживаю в консоли, а потом уже использую ее в GUI). Но никаких изменений собственно в бизнес-логике это не вызывает.
0
 Аватар для Robesper3411
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 535
Записей в блоге: 1
24.12.2019, 15:09  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Это не меняет совершенно ничего. Логика действий остается та же (скажу больше, я сам, как правило, всю бизнес-логику отлаживаю в консоли, а потом уже использую ее в GUI). Но никаких изменений собственно в бизнес-логике это не вызывает.
согласен. Пожалуй действительно Вы правы. Однако мне все же нужно решить вопрос с отрисовкой формы, так как она все еще не отрисовывается

Добавлено через 49 минут
Запустил форму, начал бесконечный цикл в отдельном потоке, но все равно результат не удовлетворительный:
При нажатии на кнопку создается отдельный поток и выполняется метод с бесконечным циклом, кнопка не "отжимается", другие контролы формы также не активны.
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,057
24.12.2019, 15:40
Robesper3411, код создания потока в студию! Желательно, с участием QThread.

thread::join тут не подходит совсем
https://en.cppreference.com/w/... hread/join
0
 Аватар для Robesper3411
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 535
Записей в блоге: 1
24.12.2019, 16:15  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Желательно, с участием QThread
Алексей1153, вот как раз сейчас пытаюсь разобраться с QThread. Немного непривычный он после std:thread.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
24.12.2019, 16:16
Цитата Сообщение от Robesper3411 Посмотреть сообщение
При нажатии на кнопку создается отдельный поток и выполняется метод с бесконечным циклом, кнопка не "отжимается", другие контролы формы также не активны.
Значит сделали что-то не так. Вам сделать тестовый пример?
0
 Аватар для Robesper3411
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 535
Записей в блоге: 1
24.12.2019, 17:06  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Значит сделали что-то не так. Вам сделать тестовый пример?
да, буду весьма признателен за помощь.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
24.12.2019, 17:08
Лучший ответ Сообщение было отмечено Robesper3411 как решение

Решение

Цитата Сообщение от Robesper3411 Посмотреть сообщение
да, буду весьма признателен за помощь.
Без проблем, вот.
Вложения
Тип файла: rar untitled.rar (4.7 Кб, 67 просмотров)
0
 Аватар для Robesper3411
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 535
Записей в блоге: 1
25.12.2019, 09:38  [ТС]
insite2012, спасибо, дружище.
C++
1
m_pWorker->deleteLater();
пришлось закомментить только, но это вообще не проблема. Главное - суть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.12.2019, 09:38
Помогаю со студенческими работами здесь

Server в отдельном потоке
Вот файл serverthread.h #ifndef SERVERTHREAD_H #define SERVERTHREAD_H #include <QtNetwork/QTcpServer> #include...

Коннекты в отдельном потоке
У меня множество коннектов лежит в отдельном методе run(). Если я правильно понимаю они не работают, т.к. метод отрабатывает и все коннекты...

Cлоты в отдельном потоке
есть у меня QMap из другого потока приходит сигнал на чтение данных, есть еще функции вызываемые пользоввателем из гуи, которые...

Создание класса в отдельном потоке
Добрый вечер. Как можно сделать чтобы при создании объекта класса он сразу создавался в отдельном потоке? Чтобы при создании объекта класса...

Отрисовка OpenGL в отдельном потоке
Доброго дня! Помогите пожалуйста решить такую задачу: Необходимо рисовать средствами OpenGL в отдельном потоке на Qt. В версии Qt 4.8 это...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru