Подскажите как из фонового потока передать qobject* в гуи поток

с учетом того, что фоновой поток постоянно обновляет object* данные. Можно ли скопировать в другой объект и кинуть копию через сигнал-слот вместо этого оригинала, чтобы не мутить с мьютексами ?

66 ответов

92 просмотра

а через указатели? не очень понятно что у вас за qobject

roman---- Автор вопроса
zqtprog
а через указатели? не очень понятно что у вас за q...

передаю такое QList<Ring*> listring, где Ring это от qobject наследник, но если фоновой поток удалит listring, то гуи крэшнится из-за этого

roman ---
передаю такое QList<Ring*> listring, где Ring это ...

в гуи проверку указателя сделать. Ring через new же делается? после удаления приравнять к null_ptr или 0

roman ---
передаю такое QList<Ring*> listring, где Ring это ...

В сигнале передавать данные, а не указатель на объект. Зачем тебе указателями на изменяемые объекты кидаться?

roman---- Автор вопроса
Александр ⚛️
В сигнале передавать данные, а не указатель на объ...

данных много, тогда придется их руками из этого указателя выдирать куда-то и потом перекидывать)

roman ---
данных много, тогда придется их руками из этого ук...

Ну вот ты сам в свою ловушку попал. Всё логично же )

Александр ⚛️
В сигнале передавать данные, а не указатель на объ...

чтобы вам копию не создавать, как раз для этого так и отслеживаются изменяемые данные. причем пишут что данных много.

roman ---
данных много, тогда придется их руками из этого ук...

выдирать? указатель это всего лишь ссылка/адрес на ваш единственный объект

Александр ⚛️
В сигнале передавать данные, а не указатель на объ...

обратите внимание как в Qt исходниках везде в функциях и слотах передается QString.. через что? правильно! через указатель

roman---- Автор вопроса
zqtprog
в гуи проверку указателя сделать. Ring через new ж...

вот приравниваю к null, но почему-то из qlist повторно извлекается тот же указатель вместо нуля, где ошибка ?)

roman---- Автор вопроса
roman ---
screenshot вот приравниваю к null, но почему-то из qlist повт...

так ты присваиваешь ему тоже самое значение

roman---- Автор вопроса
mefest
так ты присваиваешь ему тоже самое значение

это слепил вместе симуляцию очистки данных в потоке и чтение с проверкой на null в гуи

roman ---
это слепил вместе симуляцию очистки данных в поток...

не очень понял, но кажется код выводит в консоль все правильно

roman ---
screenshot вот приравниваю к null, но почему-то из qlist повт...

Вы хотите в 801-й строке записать NULL в лист?

roman---- Автор вопроса
Iliya S.
Вы хотите в 801-й строке записать NULL в лист?

да в потоке фоновом, чтобы при чтении в гуи сделать проверку на null

roman ---
screenshot вот приравниваю к null, но почему-то из qlist повт...

Переменная ring хранит в себе указатель, который ты взял через .at(), ты записал эту локальную копию указателя на ноль, а потом снова присвоил ей тоже самое значение

Александр ⚛️
Из потока в поток? Не знал, ну извините.

да хоть куда… а как и через что потоки должны общаться? они ж зачем-то существуют и должны брать исходные данные откуда-то и результат куда то девать

roman---- Автор вопроса
Iliya S.
https://doc.qt.io/qt-6/implicit-sharing.html читал...

и к чему это? вообще не по теме

Iliya S.
https://doc.qt.io/qt-6/implicit-sharing.html читал...

задача: передать из одного потока в другой поток массив float… как?

Iliya S.
Вы же про QString писали

QString по идее тот же массив байтов..

zqtprog
QString по идее тот же массив байтов..

Посмотрите ссылку и про implicit sharing в Qt =)

Iliya S.
Посмотрите ссылку и про implicit sharing в Qt =)

не увидел там ничего полезного для передачи массивов данных без копирования между потоками… указатели - сила.

roman---- Автор вопроса
zqtprog
не увидел там ничего полезного для передачи массив...

а если указателем передал из потока в поток qobject какой-то, то есть шансы словить одновременное обращение к нему в этих потоках ? тут вроде мьютекс надо ?

zqtprog
не увидел там ничего полезного для передачи массив...

Странно, QList, QVector explicit sharing. Поэтому если посылать через emit получишь искомое

зачем использовать еще неизвестно как написанные обвёртки над указателями , если и так всё можно самому сделать через сами указатели, больше понимая сам процесс…

zqtprog
зачем использовать еще неизвестно как написанные о...

так давайте вообще не использовать никаких оберток и будем велосипеды создавать. если работаете с Qt то надо знать как работает фреймворк

roman---- Автор вопроса
Iliya S.
https://t.me/qt_chat/310091

там нет ответа на вопрос, как передать qobject из потока в поток по указателю либо значению)

zqtprog
зачем использовать еще неизвестно как написанные о...

Здесь же про фреймворк чат? Фреймворк - это рамки, в которые разработчик добровольно себя "засовывает". Не надо считать себя умнее создателей Ф, пытаться сломать все и пр и др.

roman---- Автор вопроса
Iliya S.
Ответ там есть, Вы не смотрели

можешь ткнуть) на нашел)

roman ---
можешь ткнуть) на нашел)

Могу QObject по дизайну Qt должен в своем потоке находиться, т.е. он не предназначен для общего владения

roman---- Автор вопроса
Iliya S.
Могу QObject по дизайну Qt должен в своем потоке н...

это я читал, и как мне передать собранные данные тогда ?)

roman---- Автор вопроса
roman ---
сигналы слоты нужны)

Тогда меняйте архитектуру

mefest
так давайте вообще не использовать никаких оберток...

зачем усложнять, Qt прекрасен другими многими вещами… но зачем использовать лишние промежуточные обвёртки, если ты сам можешь чуть ли на winapi или linuxapi это реализовать… сколько раз натыкался уже на кривости Qt-классов, включая QThread, QImage, QPixmap и т.д. и даже казалось бы простым классом QFile. Что использовать, выбор каждого. можно делать через апи, а можно хоть через 10 оболочек и обверток друг над другом, собирая баги… и умность тут ни при чем… каждый пишет как ему удобно. всё зависит от задачи. а то есть фанаты доя простых задач заниматься десятиуровневым наследованием классов, в конце которого тащится указатель на родителя…

Iliya S.
Возможно не нужно наследовать QObject?

не видно всего кода :) может там гораздо все проще :)

roman---- Автор вопроса
Iliya S.
Возможно не нужно наследовать QObject?

посмотрел внимательнее класс, сигналов нету в нем, можно убирать наследование)

zqtprog
зачем усложнять, Qt прекрасен другими многими веща...

надо знать инструмент которым пользуешься, без этого тяжело. каждый может писать как ему нравится, но это совсем не значит что так правильно и стоит такой подход продвигать новичкам

zqtprog
зачем усложнять, Qt прекрасен другими многими веща...

Не забывайте, что после Вас на проект, возможно, придет другой человек. Человеку скажут, что проект на Qt (а это - фактически надмножество плюсов), а там мешанина из std, сырых указателей и слепленных на коленке паттернов. Человек этот будет психопат и будет знать где Вы живете. Взяли фреймворк - используйте рекомендации от создателей. Не нужно расстраивать психопата =)

zqtprog
зачем усложнять, Qt прекрасен другими многими веща...

обёртки qt кроссплатформенные, как и стд, апи использовать всё же не стоит)

mefest
надо знать инструмент которым пользуешься, без это...

я за близость к api, как за более лучшее понимание всех процессов… Qt -великолепный gui, QString это просто находка 😁 и т.д. Но надо понимать что и для чего делается… даже ту же работу по tcp/udp лучше сделать самому на апи, чем использовать Qt-классы

Aniki Hi$ok@ 🌈 Z 🐀
обёртки qt кроссплатформенные, как и стд, апи испо...

😂😂😂 посмотрите код, там же тот ifdefine над апи.. Qt это тоже linux-api или winapi только в красивой обвертке

zqtprog
😂😂😂 посмотрите код, там же тот ifdefine над апи.. ...

при компиляции твой код на апи не превратится в код на другом апи

Aniki Hi$ok@ 🌈 Z 🐀
при компиляции твой код на апи не превратится в ко...

прочитайте выше :) делается так же как и в Qt… два и более разветвления в зависимости от ОС.. еще раз говорю, посмотрите исходный код Qt

твоя работа с голыми сокетами, архивные кадры

иногда это как раз Qt на вашем видео

zqtprog
я за близость к api, как за более лучшее понимание...

такое лучше в других чатах продвигать. чат по Qt и тут стараемся обсуждать решения в рамках Qt. предлагаю закрыть тему чтоб не переходить на холивар

zqtprog
у Романа то получилось? 😁

если хотите помочь своим способом пишите ему в лс. на его вопросы отвечали

zqtprog
прочитайте выше :) делается так же как и в Qt… два...

мне все равно как работает обёртка qt под капотом, я просто подключаю хидер и всё. А в другом проекте хочу видеть тоже самое, я не хочу разбираться в чьём то велосипеде. Так же я получаю гарантию, что решение от qt/std точно протестировано и работает как надо

zqtprog
у Романа то получилось? 😁

Роману, чтобы получилось - нужно описать проблему. Что за данные, что за требования к системе. Архитектуру, в общих чертах. Можно между потоками и через БД данные гонять.

Iliya S.
Роману, чтобы получилось - нужно описать проблему....

поэтому и хотелось от него «огласите весь список плжалуйста».

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта