Обмен различными видами данных между потоками в Qt - PullRequest
0 голосов
/ 27 октября 2019

Это вопрос дизайна. Скажем, у меня есть рабочий поток и поток GUI. Рабочий поток выполняет некоторую работу, и графический интерфейс должен отображать информацию о текущем состоянии этой работы (например, рабочий может обрабатывать некоторые файлы, а графический интерфейс должен отображать количество обработанных файлов, имеющих отдельные счетчики для файлов разных типов).

В Qt обмен информацией между потоками должен осуществляться через механизм сигналов-слотов. Но если у меня много разных видов информации для передачи от потока к потоку, я должен создать разные сигналы для каждого типа информации (например, для каждого типа файла), или было бы лучше создать один сигнал (дляНапример, informationUpdated(InfoContainer); со специальной структурой (InfoContainer), которая будет хранить данные, которые я хочу передать?

1 Ответ

0 голосов
/ 28 октября 2019

Это полностью зависит от того, какие типы данных вы собираетесь выдавать.

1- Если это простые неструктурированные типы, вы можете использовать QVariant , который может обрабатывать много типов (примитивы и типы Qt, такие как QString, QPoint и т. д.)

2- В качестве альтернативы, вы можете использовать контейнерный класс, такой как QMap , чтобы передать список QVariant как Йоханнес Шауб сказал в комментарии.

3 - Вы также можете создать свой собственный класс Message, который интегрирован с системой мета-объектов . Затем преобразуйте его в QVariant для отправки. Вот хороший Пример пользовательского типа из документации Qt.

Я выбираю последний метод для лучшей интеграции и расширяемости.

...