В документации Qt приведен следующий пример подключения сигнала к слоту:
Код: Выделить всё
QObject::connect(lineEdit, &QLineEdit::textChanged, label, &QLabel::setText);
Однако синтаксис несколько сложен (то есть многословен) и его можно сократить с помощью этого макроса:
Код: Выделить всё
#define CONNECT(sender, signal, receiver, method) \
QObject::connect( \
sender, &std::remove_pointer_t::signal, \
receiver, &std::remove_pointer_t::method \
)
Теперь приведенное выше соединение упрощается до:
Код: Выделить всё
CONNECT(lineEdit, textChanged, label, setText);
Я проверил это, и оно работает нормально. Итак, кажется, что этот макрос позволяет объединить преимущества синтаксиса соединения на основе функтора (проверка типов во время компиляции и неявные преобразования типов) с простым синтаксисом. Конечно, это не будет работать для перегруженных сигналов или слотов, а также когда тип соединения не должен быть Qt::AutoConnection по умолчанию.
Мой вопрос: Есть ли какие-либо проблемы с этим подходом, о которых я еще не знаю, и действительно ли это вообще хорошая идея?
Подробнее здесь:
https://stackoverflow.com/questions/786 ... ect-syntax