Я читаю Вот что класс QVector использует неявный обмен данными, чтобы максимально использовать ресурсы и минимизировать копирование. Я не знаю, вызывает ли копирование данных сигнал с параметром QVector в слот в другом потоке! Эти вопросы также относятся к этой проблеме:
Передача QVector из рабочего потока в основной поток через сигнал / слот
Излучение эталона QVector в сигнале Qt приводит к копированию
Но я не мог понять суть из них. ясно мой вопрос:
У меня есть сигнал:
void someSignal(QVector<int> values);
И слот:
void someSlot(QVector<int> values);
Это в разных темах и я их подключаю. поэтому тип соединения — Qt :: QueuedConnection. Также я должен заявить, что элементы QVector не изменяются в слоте. Они только что прочитаны.
Из-за испускаемого сигнала копируются элементы QVector?
Из-за испускаемого сигнала копируются элементы QVector?
№ неявная совместная документация Также про это ясно
Неявное разделение происходит за кулисами; программисту не нужно беспокоиться об этом. Даже в многопоточных приложениях происходит неявное совместное использование, так как объясняется в потоках и неявно общих классах.
Просто выделите первый абзац из этой части документации:
Qt использует оптимизацию, называемую неявным разделением, для многих его классов значений, особенно QImage и QString. Начиная с Qt 4, неявные общие классы можно безопасно копировать в потоки, как и любые другие классы значений. Они полностью возвращаются. Неявное разделение действительно неявно.
Других решений пока нет …