В рамках qt большинство сигналов библиотеки и слотов используют указатели в качестве параметров. Мне было интересно: если я создам «структуру» сигнального слота, которая принимает ссылку как параметр вместо указателя, будет ли скопирован весь параметр или всего 4 байта (32-разрядная система), как в обычной ссылке на C++?Qt-сигнал и слоты: копируются ли ссылочные аргументы?
Я спрашиваю об этом, потому что я заметил что-то, когда создаю методы сигнала/слота с эталонным параметром. Когда я тогда connect
их, механизм автозаполнения в QTCreator не намекает мне со ссылочными параметрами, как он будет делать с параметрами указателя. Он намекает мне на регулярный параметр. Например:
создать сигнал и слот:
...
signals:
void mySignal(int& parameter);
private slots:
void on_mySignal(int& parameter);
Я затем попытаться соединили их и Qt оленья кожа добавить &
для справки в параметре:
...
connect(this, SIGNAL(mySignal(int)), this, SLOT(on_mySignal(int)));
я должен вручную изменить на :
connect(this, SIGNAL(mySignal(int&)), this, SLOT(on_mySignal(int&)));
Таким образом, мне интересно, действительно ли ссылка работает с сигналами/с много? Буду признателен всем за помощь.
Ваше помещение ошибочно. Регулярные ссылки на C++ не имеют размера, поскольку они не являются объектами. Вы не можете, например, использовать 'sizeof' для получения размера ссылки. Также вы должны прекратить использование устаревшего синтаксиса сигнала/слота. Правильный синтаксис - это «connect (this, & Class :: mySignal, this, & Class :: on_mySignal)», который позволяет вам не беспокоиться об этом. – nwp
Я понимаю, спасибо. Но чтобы ответить на главный вопрос: при использовании сигналов/слотов со ссылкой, большой объем данных копируется? – Bremen
Я бы ожидал копию 'int', даже если вы указали' int & '. Вы можете проверить это, назначив аргумент в слоте и посмотрите, изменился ли параметр, который вы передали. – nwp