Qt5: connect: как использовать 'connect', если слот имеет меньше параметров, чем сигнал - PullRequest
0 голосов
/ 18 сентября 2018

Задача - подключить от одного сигнала с одним параметром к слоту с нулевыми параметрами.Со «старым» Qt4-способом соединения он работает следующим образом

connect(object1, SIGNAL(signal(int param)), object2, SLOT(slot()))

Но что, если я хочу использовать безопасные с точки зрения типов соединения Qt5?

В документации просто упоминаются случаи с:

  • подключением к параметрам по умолчанию в слоте

  • и использованием вышеупомянутого способа подключения на основе строк.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Механизм соединения в стиле Qt5 игнорирует дополнительные аргументы сигнала, как вы могли бы указать в стиле Qt4:

Механизм сигналов и слотов является безопасным типом: сигнатура сигналадолжен соответствовать подписи получающего слота. (На самом деле слот может иметь более короткую сигнатуру, чем сигнал, который он получает, поскольку он может игнорировать дополнительные аргументы.) Поскольку сигнатуры совместимы, компилятор может помочь нам обнаружить несоответствия типов при использовании функции на основе указателясинтаксис.Синтаксис SIGNAL и SLOT на основе строк будет обнаруживать несоответствия типов во время выполнения.

Из Qt Docs (выделение мое).

Так что вы можете использовать новый стиль, подобный этому:

connect(&object1, &ClassObject1::signal, &object2, &ClassObject2::slot);
0 голосов
/ 18 сентября 2018

Неважно, нашел способ справиться с этим, не объявляя и не определяя дополнительный слот: решение состоит в том, чтобы использовать лямбду, чтобы выделить дополнительные параметры.

Пример (в случае object2 isнаш собственный проект (это). Следуя стилю именования, как в вопросе:

connect(object1, &Object1::signal, [this](int) { slot(); } );
0 голосов
/ 18 сентября 2018

Вы можете подключиться как Qt4-Way без проблем.Единственное, что вы не можете сделать, это подключиться к слоту с меньшим количеством параметров.

...