Тип аргумента для сигнала и слота Qt, имеет ли значение задание отступников?
Для сигнала и слота типа ниже
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 используется несовместимый тип. Я думал, что механизм слота сигнала способен обнаруживать ошибку типа аргумента во время компиляции.
- Сколько стоит слишком много с ключевым словом C ++ 11 auto?
- Какова цель Rank2Types?
- Тип возврата '?:' (Тернарный условный оператор)
- Тестирование, если объект имеет общий тип в C #
- Буферный тип данных C99?
- Когда использовать значения без знака над подписанными?
- «Неполный тип» в classе, который имеет один и тот же тип самого classа
- Как определить разные типы для одного и того же classа в C ++
- длинный длинный в C / C ++
- unsigned short в java
- Создание серии дат - использование типа даты в качестве входных данных
- Получение типа System.Type из частичного имени типа
- Интерфейсы Java и типы возврата
Qt проверяет нормализованную подпись , что означает
Нормализация уменьшает пробелы до минимума, при необходимости перемещает «const» на фронт, удаляет «const» из типов значений и заменяет ссылки const со значениями.
Отказ от ответственности: мой qt довольно ржавый, но механизм сигнала / слота по-прежнему остается только вызовом функций C ++. Если механизм сигнала / слота фактически копирует объекты во внутреннее хранилище, мои извинения (вам нужно проверить страницы Qt, есть большой в сигналах / слотах afaik), поскольку биты ниже будут только релевантными в контексте C ++, а не в контексте C ++ + Qt.
Если вы не укажете ссылку, строка будет скопирована (и наличие константы не имеет значения, любые внесенные в нее изменения останутся в функции).
Если вы оставите в ссылке, но выберете const, вы разрешите методу изменять строку, которую вы ему даете. Они оба работают, но выполняют разные вещи с передаваемым вами объектом (количество копий / возможность сохранения изменений).
Предлагаю вам прочитать следующие ресурсы:
(по корректности 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)
все разные.