ДмитрийMarch 21, 2019, 6:57 a.m.
Проброс std::array<qint32, SIZE> с помощью сигнала по ссылке
qt, std::array, signal, Slot
Всем привет!
Хочу с помощью сигнала пробросить в слот массив std::array.
Делаю следующее:
using fft_mag_arr= std::array<qint32, SIZE>; Q_DECLARE_METATYPE( fft_mag_arr );
в конструкторе класса вызываю
qRegisterMetaType<fft_mag_arr>();
само объявление сигнала:
signals: void fft_mag_out(fft_mag_arr &fftmag, uint size);
Слот объявлен так (так можно в данном случае, если в сигнале fft_mag_arr?)
void slotFunc(std::array<qint32, SIZE> &arr, uint size);
При запуске приложения при вызове сигнала пишет:
QObject::connect: Cannot queue arguments of type 'fft_mag_arr&' (Make shure 'fft_mag_arr&') is registered using qRegisterMetaType().
Как мне пробросить ссылку на std::array с помощью сигнала?
Спасибо
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
AD
- Akiv Doros
- Nov. 12, 2024, 1:58 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
m
- molni99
- Oct. 26, 2024, 11:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
m
- molni99
- Oct. 26, 2024, 11:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Last comments
Qt/C++ - Lesson 065. The correspondence of HTTP errors to server response errors in QNetworkAccessManager s Midsummer Classic in Kansas City priligy online pharmacy
Qt/C++ - Lesson 039. How to paint stroke in QSqlTableModel by value in the column? Many OPKs would advise users to start using the test strips around day 9 of your cycle, considering day 1 to be the first day of full menstrual flow buy priligy australia
Release of C++/Qt and QML application deployment utility CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
Qt/C++ - Lesson 031. QCustomPlot – The build of charts with time buy generic priligy We can just chat, and we will not lose too much time anyway
Qt/C++ - Lesson 060. Configuring the appearance of the application in runtime I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
Now discuss on the forum
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey1Nov. 15, 2024, 5:04 p.m.
добавить qlineseries в функции priligy for sale Gently flush using an ear syringe
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
IscanderCheNov. 1, 2024, 1:43 a.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Добрый день
Тут скорее регистрация мета типа не полная. Нет его имени.
Напишите так
Попробовал, но не помогло.
Ну не знаю, кое-где на форумах встречается вариант с typedef вместо using
А вообще вполне закономерный вопрос, а зачем вам qRegisterMetaType? Слоты и сигналы и так работают с ссылками на std::vector без всякой метамагии.
Так должно работать,
Да и так тоже
Там qRegisterMetaType ни к чему по сути, это нужно для работы QVariant, да регистрации в QML. И ещё ряда более редких случаев.
typedef тоже не помог.
Я сначала и написал все без qRegisterMetaType. Но начало вылетать предупреждение. Пришлось вставить.
Какое предупреждение? Предупреждение - это не ошибка. Если вам статический анализ в Qt Creator что-то показывает, то это не значит, что это руководство к действию.
В Qt Creator используется статический анализатор clang, который ничего не знает о сигналах и слотах в полной мере.
Добрый день. Вопрос, может не совсем в тему. А зачем вы используете такой контейнер? Передавать контейнер со статическим размером через сигнал/слот мне кажется не очень удобным.
Я, конечно, понимаю, что вы его через дефайн заносите, но всё равно вам значит в разные классы заголовочный файл с этим дефайном тащить приходится.
Если вы за память переживаете - можно взять вектор (std::vector или QVector) и зарезервировать под него память и передавать его размер через отдельную переменную, как у вас и сделано.
Может после этого и все проблемы решатся. И не нужно будет с этой ошибкой биться.
Хотя, возможно, у вас какая-то логика, которую я не вижу, которая требует именно такой тип контейнера.
Дело в том, что слот не вызывается.
Лучше действительно сделайте через вектор с выделением заранее заданного размера памяти, как Александр посоветовал, и тогда всё заработает.
Иначе так слишком переусложните логику на ровном месте.
Тут мне код достался написанный. Объявляется обычный массив и в сигнале кидается указатель на него, а в слоте уже пробегаются по этому массиву. Хотлось бы избавиться от этого и по ссылке передавать массив. Но, может, я и зря пытаюсь все привести на более высокий уровень. А так да, можно и вектор использовать.
Если там не настолько критично потребление памяти. То есть если это Desktop, а не встраиваемое решение или какой-нибудь игровой/графический движок. То проще будет на вектор переписать. Меньше головной боли.
ПО работает на малине. Попробовал сделать отдельный проект с парой классов. Один емитит вектор, второй его принимает. Все работает. На компе установлена 5.12.1. На малине Qt 5.3.2 как выяснилось. Не может же быть бага в Qt?
Дело еще в том, что сигнал с массивом емитится из другого потока, в котором запущен таймер, по таймауту которого и емитится массив. Врядли это с потоками связано?
Проблему решил. Попробовал вектор по ссылке передавать, но ошибка была та же. Передача вектора в сигнале по константной ссылке решила проблему. Все работает и без qRegisterMetaType. Похоже, что это из-за того, что сигнал и слот в разных потоках.
Скорее всего. Вам бы на всякий случай ещё и мюьтексами в слоте закрываться, если не сделано это
Да, мьютекс добавил, но в том потоке, где сигнал вызывается.