Сигналы и слоты Qt: упрощенный синтаксис подключения?C++

Программы на C++. Форум разработчиков
Anonymous
Сигналы и слоты Qt: упрощенный синтаксис подключения?

Сообщение Anonymous »

В документации 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

Вернуться в «C++»