Ответ 1
Qt проверяет нормальную подпись что означает
Нормализация уменьшает пробелы до минимум, движется "const" на фронт где это уместно, удаляет 'const' из типов значений и заменяет константу ссылки со значениями.
Для сигнала и слота ниже типа
signals:
void textChanged(const QString &);
public slots:
void setText(const QString & text)
тип аргумента textChanged и setText, похоже, работает с инвариантом const и &. Имеет ли постоянная и ссылочная квалификация какие-либо различия по сравнению с использованием только QString?
QObject::connect(a,SIGNAL(textChanged(QString)),b,SLOT(setText(QString)));
QObject::connect(a,SIGNAL(textChanged(const QString &)),b,SLOT(setText(const QString &)));
EDIT: Я не заметил окно вывода, отображающее сообщения об ошибках, когда в SIGNAL или SLOT используется несовместимый тип. Я думал, что механизм слота сигнала способен обнаруживать ошибку типа аргумента во время компиляции.
Qt проверяет нормальную подпись что означает
Нормализация уменьшает пробелы до минимум, движется "const" на фронт где это уместно, удаляет 'const' из типов значений и заменяет константу ссылки со значениями.
Отказ от ответственности: мой qt довольно ржавый, но механизм сигнала/слота по-прежнему остается только вызовом функций С++. Если механизм сигнала/слота фактически копирует объекты во внутреннее хранилище, мои извинения (вам нужно проверить Qt-страницы, там большой на сигналах/слотах afaik), так как бит ниже будет иметь значение только в контексте С++, а не в контексте С++ + Qt.
Если вы не укажете ссылку, строка будет скопирована (и наличие константы не имеет значения, любые изменения, внесенные в нее, останутся в функции).
Если вы оставите в ссылке, но выберете const, вы разрешите методу изменять строку, которую вы ему даете. Они оба работают, но выполняют разные вещи с передаваемым вами объектом (количество копий/возможность сохранения изменений).
Предлагаю вам прочитать следующие ресурсы:
(по константной корректности) https://isocpp.org/wiki/faq/const-correctness
(по ссылкам) https://isocpp.org/wiki/faq/references
чтобы точно понять, что такое передающий параметр и как
void foo(const A&)
/
void foo(const A)
/
void foo(A&)
/
void foo(A)
все разные.