В платформе qt в большинстве библиотечных сигналов и слотов в качестве параметров используются указатели. Мне было интересно, если я создам «структуру» сигнального слота, которая принимает ссылку в качестве параметра вместо указателя, будет ли скопирован весь параметр или только 4 байта (32-битная система), как в обычной ссылке на С ++?
Я спрашиваю об этом, потому что кое-что заметил, когда создаю методы сигнала / слота с параметром ссылки. Когда я затем 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&)));
Таким образом, мне интересно, работает ли ссылка даже с сигналом / слотом? Буду признателен за любую помощь.
sizeof
, чтобы получить размер ссылки. Также вам следует прекратить использовать устаревший синтаксис сигналов / слотов. Правильный синтаксис -connect(this, &Class::mySignal, this, &Class::on_mySignal);
, поэтому вам не нужно об этом беспокоиться. - person nwp   schedule 12.02.2017int
, даже если вы указалиint &
. Вы можете проверить это, присвоив аргументу в слоте, и посмотреть, изменился ли переданный вами параметр. - person nwp   schedule 12.02.2017QVector
, используют копирование при записи, поэтому копированиеQVector
s не копирует данные. Если вы используетеstd::vector
s, они фактически скопируют данные. - person nwp   schedule 12.02.2017Qvector<something>&
. - person Łukasz Przeniosło   schedule 12.02.2017